我正在使用 ring 和 clojure 编写一个 Web 应用程序。我正在为开发服务器使用码头适配器,为 IDE 使用 emacs/SLIME。虽然 wrap-reload 确实有帮助,但 run-jetty 会阻止我的 slime 会话,我希望能够随意启动/停止它,而不必在单独的终端会话中运行它。理想情况下,我想定义一个服务器代理和函数 start-server 和 stop-server 来启动/停止代理内的服务器。这可能吗?
问问题
14296 次
2 回答
117
我的 Ring 应用程序中通常有一行如下所示:
(defonce server (run-jetty #'my-app {:port 8080 :join? false}))
这可以防止锁定 REPL。它还允许我重新编译这个文件,而不用担心我的服务器会被重新定义。它还允许您像这样在 REPL 进行交互:
user=> (.stop server)
和
user=> (.start server)
于 2010-04-24T21:31:00.753 回答
1
Jetty 文档有一些关于Jetty正常关闭的信息。这可能是不够的信息,但它可以让你开始。
我还没有开始使用 compojure,但总的来说我更喜欢使用 Tomcat。它功能更全;除其他外,有一个记录良好的 API 用于启动和关闭它,它在专用端口上侦听关闭命令;有一些ant
任务可以做到这一点,当然也可以从 Java 应用程序中调用它们。我只是不知道 Compojure 将 REPL 连接到正在运行的 Web 容器实例有什么魔力,以及是否/如何自动重新加载类......希望其他人能够提供更多信息。
于 2010-04-24T20:57:52.137 回答