Comment puis-je arrêter le serveur de jetée clojure?
Question
Je suis en train d'écrire une application Web en utilisant l'anneau et Clojure. J'utilise l'adaptateur de jetée pour le serveur de développement et emacs / BOUE pour IDE. Alors que wrap-reload ne l'aide, les blocs run-jetée ma séance de boue et je voudrais être en mesure de démarrer / arrêter à volonté sans avoir à l'exécuter dans une session de terminal séparé. Idéalement, je voudrais définir un agent serveur et les fonctions de démarrage serveur et arrêt-serveur qui démarrer / arrêter le serveur à l'intérieur de l'agent. Est-ce possible?
La solution
J'ai habituellement une ligne dans mon application anneau qui se présente comme suit:
(defonce server (run-jetty #'my-app {:port 8080 :join? false}))
Ce verrouillage empêche le REPL. Il me permet aussi de recompiler ce fichier sans se soucier que mon serveur redéfinies. Il vous permet également d'interagir au REPL comme ceci:
user=> (.stop server)
et
user=> (.start server)
Autres conseils
La documentation jetée contient des informations sur arrêt progressif de la jetée. C'est probablement pas assez d'informations, mais il peut vous aider à démarrer.
Je n'ai pas commencé à jouer avec compojure encore, mais je préfère en général de travailler avec Tomcat. Il est plus complet; entre autres, il y a une API bien documenté pour le démarrer et l'arrêter, il écoute la commande d'arrêt sur un port dédié; il y a des tâches ant
de le faire, et ils pourraient bien sûr être appelé à partir d'une application Java aussi bien. Je ne sais pas quel genre de magie Compojure fait avec connexion REPL à une instance en cours d'exécution du conteneur Web, et si / comment le rechargement des classes automatique arrive ... quelqu'un d'autre, espérons sera en mesure de fournir plus d'informations.