如何在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应用程序。 我只有三种可能的解释:

  • 没有人使用Clojure / Compojure进行除Jetty本地开发以外的其他任何事情,即在生产中
  • 每个人都在没有上下文根的专用Jetty上部署Clojure / Compojure应用程序(像Node.js应用程序一样使用它)
  • 有一种非常简单的方法可以避免我遇到的问题,我不知道
  • 你认为哪些是这种情况? 或者是别的什么?

    编辑:

    请注意,创建一个战争文件是Maven / Leiningen的一个明智之举,而不是我的意思。 我想知道我必须编写如此多的代码才能使Compojure与Tomcat一起工作,像静态文件服务和上下文根感知等基本功能应该可以直接使用。


    人们正在将Compojure应用程序部署到非Jetty servlet容器。

    查看:

  • https://github.com/weavejester/lein-ring
  • https://github.com/weavejester/lein-beanstalk
  • 同时检查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?