我正在使用 Clojure/ClojureScript 并且正在编写一个 Web 应用程序。当我使用 ring 作为开发服务器时,一切都很好。
问题是我应该使用什么容器进行生产?我也应该使用 ring 进行生产吗?我应该使用Tomcat吗?有推荐的部署 Clojure 应用程序的方法吗?你能指出一些关于这方面的文件吗?
谢谢!
我正在使用 Clojure/ClojureScript 并且正在编写一个 Web 应用程序。当我使用 ring 作为开发服务器时,一切都很好。
问题是我应该使用什么容器进行生产?我也应该使用 ring 进行生产吗?我应该使用Tomcat吗?有推荐的部署 Clojure 应用程序的方法吗?你能指出一些关于这方面的文件吗?
谢谢!
部署用 Java 与 Clojure 编写的 java servlet 并没有本质上的不同,所有 Clojure Web 库和框架都会生成兼容的 servlet,因此您有许多部署选项。
我们使用netty来运行我们基于 ring 的 web 应用程序,只需从系统服务运行“lein run”,就可以在生产中产生巨大的影响。许多其他人选择使用 lein uberwar 生成一个战争文件并将其托管在 tomcat 上。特定的托管机制似乎不如部署过程相关。所有 JavaScript 文件都从 CDN 提供。Immutant也是一个有趣且非常面向 Clojure 的选择,具有强烈的“进取心”感。
最让我印象深刻的是构建一个可重复的构建,包括部署。Pallet是一个很好的方法,尽管它有一些学习曲线。
有几个选项。
第一个很简单:Heroku。他们有一个足够用于部署和测试的免费层。我不会对此进行详细介绍,但我决定不再使用 Heroku。
另一个常见的选择是亚马逊 AWS。我收集 AWS 上的大多数应用程序都使用lein-beanstalk [对不起,这里没有引用]。Lein-beanstalk 已经出现了很长一段时间,并且似乎维护得很好。它也由维护 Compojure 的同一个人维护。
我使用VPS。我使用 Nginx 设置了 linux 构建并使用 git 进行部署。所以,基本上,我的流程是创建站点,编译到 lein uberjar,然后部署。我知道有些人可以并且确实在他们的应用程序上使用 leiningen “lien ring server” 语句并使用许多其他配置,例如 Maven、Tomcat、Vagrant 部署等,但我只是在服务器,它工作得很好。
就文档而言,似乎确实缺乏有关 Clojure 部署的文档。如果您想在第一次这样做时走 VPS 路线,就必须把头撞到墙上并弄清楚。我发现我的问题几乎都没有专门涉及 Clojure。
In development I use:
lein ring server
: then to compile it to a war file I use:
lein ring uberwar
: and just drop the resulting jar file into the Webapps directory and it works fine. I use Jetty by the way