fut*_*lib 57 deployment clojure war compojure
注意
鉴于此OP大约两年前编写,而不是再次提出相同的问题,我想知道是否存在分步说明,以便我可以将Noir或其他Clojure Web应用程序集成到Apache中,无论是Jetty,Tomcat , 或者是其他东西.Django也存在类似的指令,我想我明白Python在Django的情况下是作为引擎而不是环形框架运行的,所以Clojure Web应用程序更复杂.
结束注释
我深深爱上了Clojure,而Compojure似乎是一个整洁的Web框架.
但是当我想将我的应用程序部署在像Tomcat这样的常规应用程序服务器上作为WAR时,它就崩溃了.我实际上必须为静态文件和资源编写自定义Ring处理程序,这些文件和资源可以在本地Jetty和Tomcat上运行,因为库存处理程序没有,我不得不手动将上下文根添加到任何地方.
令我感到非常惊讶的是,我必须编写所有这些代码来创建可以在Jetty和Tomcat上运行的最简单的Web应用程序.我只有三种可能的解释:
您认为以下哪一种情况?或者是别的什么?
编辑:
请注意,创建一个战争文件是Maven/Leiningen的明智之举,而不是我的意思.我想知道我必须编写如此多的代码来使Compojure与Tomcat一起工作,基本的东西,如静态文件服务和上下文根知识应该开箱即用.
mac*_*mac 11
我使用以下组合使这个相当无痛:
Cake(包括deploy命令)
由Lau Jensen开发的webprojects的Cake模板.
Vagrant(Ruby VM(Virtualbox)管理工具,依赖于Chef或Puppet)
VPS(来自Slicehost)
关键部分是Lau制作的webdev模板.webdev文件夹应该放在~/.cake/templates.要基于它创建新项目,请使用:
cake new webdev *projectname*
Run Code Online (Sandbox Code Playgroud)
请注意,该模板包括log4j和Java邮件,如果不需要,可以/应该排除.它进一步假设你正在使用Enlive和Mustache,但如果那是你的毒药,将其改为Compojure/Hiccup是微不足道的.
该模板负责从开发中的jetty提供应用程序(您只需eval server.clj),并在Tomcat下运行时作为战争.如果在Tomcat下以ROOT.war部署到服务器,则路由保持相同.所有静态文件都应位于资源目录中.Jetty将从那里为他们服务(感谢Ring文件中间件).在生产中,这些被移动到webapp的根目录,并由Tomcat从那里提供服务(web.xml负责处理).
devbox文件夹包含创建安装了Tomcat的Virtualbox VM所需的Vagrantfile和cookbook.我使用cake将.war文件部署到/home/vagrantdir(这是通过project.clj中dev开发上下文的定义来控制的)..war文件/var/lib/tomcat6/webapps以ROOT.war的形式符号链接到Tomcat的webapps dir()中.有关如何使用Vagrant的更多信息,请参阅Vagrant 网站.
这个要点显示了如何调整project.clj以使用cake deploy命令的示例.该示例创建了两个上下文@dev和@prod,您可以使用它们进行部署:
cake deploy @dev / cake delpoy @prod
Run Code Online (Sandbox Code Playgroud)
我收集了这个zip中的Cake webdev模板和Vagrant文件.
我使用leiningen-war取得了一些成功,生成了一个通用战争文件(当然,假设你正在使用leiningen).它允许您指定静态html的位置,web.xml的位置以及project.clj文件中的其他资源.
我生成一个能够部署到JBoss的通用war文件(将Tomcat作为servlet容器运行)并不困难,但我认为你必须非常熟悉web.xml格式.我更喜欢创作自己的web.xml,这样可能会让我更喜欢这种方法.
leiningen-war背后的人似乎现在推荐lein-ring.我已经开始考虑这一点,但到目前为止,我还没有能够轻松地从中获取通用war文件.
我同意,虽然生产部署的核算是一个弱点.
| 归档时间: |
|
| 查看次数: |
12304 次 |
| 最近记录: |