【发布时间】:2015-09-02 21:42:37
【问题描述】:
我有一个 Clojure 应用程序,既可以从命令行使用,也可以作为 Compojure 应用程序使用。
我通过在我的 leiningen project.clj 中放置一个环处理程序和一个主函数 (clojure.tools.cli) 来做到这一点。
{...
:main my-app.core
:ring {:handler my-app.handler/handler }}
handler 定义为 (defroutes handler ...)。
现在,如果我想运行 CLI 应用程序,我可以运行 lein uberjar,然后运行 java -jar arguments。
我还可以通过lein ring server PORT 运行 Compojure 应用程序。
现在,如何在生产服务器中将其部署为 Compojure 应用程序(而不是 CLI 应用程序)? (解释lein ring server 工作原理的奖励积分。)
注意:如果有帮助,我已经在使用 nginx,而且我对要使用的容器很灵活。
【问题讨论】:
-
github.com/boot-clj/boot 可以解决吗?还不确定它是做什么的......
-
您在部署的哪个部分遇到问题,只是 lein/project.clj 语法? “作为一个复合应用程序”是什么意思? Compojure 只是一个路由库,所以即使你作为 CLI 运行,它仍然是 compojure,对吧? (我个人不喜欢 dev 或 prod 中的
lein ring server,因为它使依赖注入和 REPL 开发变得困难)。 -
@DaxFohl by CLI 我的意思是作为一个 jar,然后它转到使用 tools.cli 的 -main 入口点。 REST API 使用 CLI 应用程序用来做事的相同代码,我使用
lein ring server 8888运行它,但它是相同的代码。我希望能够部署 jar 并在端口 8888 上运行它。