J’écris une application web en utilisant ring et clojure. J’utilise l’adaptateur de jetée pour le serveur de développement et emacs / SLIME pour IDE. Bien que wrap-reload aide, run-jetty bloque ma session slime et j’aimerais pouvoir le démarrer / l’arrêter à volonté sans avoir à l’exécuter dans une session de terminal distincte. Idéalement, je voudrais définir un agent serveur et des fonctions start-server et stop-server qui démarrent / arrêtent le serveur à l’intérieur de l’agent. Est-ce possible?
J’ai généralement une ligne dans mon application Ring qui ressemble à ceci:
(defonce server (run-jetty #'my-app {:port 8080 :join? false}))
Cela empêche de verrouiller le REPL. Cela me permet également de recomstackr ce fichier sans craindre que mon serveur soit redéfini. Il vous permet également d’interagir à la REPL comme suit:
user=> (.stop server)
et
user=> (.start server)
La documentation de Jetty contient des informations sur l’ arrêt gracieux de Jetty. Ce n’est probablement pas assez d’informations mais cela peut vous aider à démarrer.
Je n’ai pas encore commencé à jouer avec compojure, mais dans l’ensemble je préfère travailler avec Tomcat. C’est plus complet; Entre autres choses, il existe une API bien documentée pour le démarrage et l’arrêt, elle écoute la commande d’arrêt sur un port dédié; il existe des tâches ant
pour cela, et elles peuvent bien sûr être appelées depuis une application Java. Je ne sais tout simplement pas quel genre de magie Compojure fait en connectant REPL à une instance en cours d’exécution du conteneur Web, et si / comment le rechargement automatique des classes se produit … Espérons que quelqu’un d’autre pourra fournir plus d’informations.