如何在Apache中集成Clojure Web应用程序
注意
鉴于此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一起工作,像静态文件服务和上下文根感知等基本功能应该可以直接使用。
人们正在将Compojure应用程序部署到非Jetty servlet容器。
查看:
同时检查lein-war
我使用以下的组合来使这非常无痛:
Cake(包含部署命令)
由Lau Jensen开发的Web项目的蛋糕模板。
Vagrant(Ruby VM(Virtualbox)管理工具,依靠Chef或Puppet)
VPS(来自Slicehost)
关键部分是Lau制作的webdev模板。 webdev文件夹应该放置在~/.cake/templates
。 基于它创建一个新的项目使用:
cake new webdev *projectname*
请注意,该模板包含log4j和Java邮件,如果不需要,可以/应该排除该邮件。 它进一步假设你正在使用Enlive和胡须,但如果那是你的毒药,将它改成Compojure / Hiccup是微不足道的。
该模板负责为开发中的jetty提供应用程序(您只需eval server.clj),并在Tomcat下运行时作为战争。 如果作为Tomcat下的ROOT.war部署到服务器,则路由保持相同。 所有静态文件应位于资源目录中。 Jetty将从那里为他们提供服务(感谢Ring文件中间件)。 在生产中,这些移动到webapp的根目录,并由Tomcat(web.xml负责处理)从那里提供。
devbox文件夹包含一个Vagrantfile和烹饪手册,用于创建安装了Tomcat的Virtualbox VM。 我使用cake来将.war文件部署到/home/vagrant
目录(这是通过project.clj中的开发环境定义来控制的)。 .war文件作为ROOT.war被链接到Tomcat的webapps dir( /var/lib/tomcat6/webapps
)中。 有关如何使用Vagrant的更多信息,请参阅Vagrant网站。
这个要点展示了一个如何调整project.clj以使用cake deploy命令的例子。 该示例创建两个您可以使用的上下文@dev和@prod:
cake deploy @dev / cake delpoy @prod
我已收集此zip中的Cake webdev模板和Vagrant文件。
我用leiningen-war取得了一些成功,生成了一个通用的战争文件(当然,假设你正在使用leiningen)。 它允许你在你的project.clj文件中指定静态html的位置,web.xml的位置和其他资源。
生成一个我能够部署到JBoss的通用war文件(作为servlet容器运行Tomcat)并不难,但我认为你必须非常熟悉web.xml格式。 我更喜欢编写我自己的web.xml,这样可以说明我更喜欢这种方法。
看来,莱宁宁战后面的人现在正在推荐莱恩环。 我已经开始关注这个问题,但到目前为止,我还没有能够轻松获得通用的战争文件。
我同意,虽然在这里核算生产部署是一个弱点。
链接地址: http://www.djcxy.com/p/56973.html上一篇: How To Integrate Clojure Web Applications in Apache
下一篇: Environment variable CLASSPATH <> Clojure's CLASSPATH. Why?