【问题标题】:404s when deploying a noir war to jetty on squeeze在挤压码头部署黑色战争时的 404
【发布时间】:2012-02-20 08:44:28
【问题描述】:

我觉得我在这里错过了一些明显的东西,但我不知道从哪里开始寻找。

我有一个新的黑色应用程序,因此创建:

$ lein noir new hiworld

我向 src/hiworld/server.clj 添加了一个新的页面处理程序:

(ns hiworld.server
  (:require [noir.server :as server]))
(server/load-views "src/hiworld/views/")

(def handler (server/gen-handler {:mode :dev
                                  :ns 'hiworld}))

我为 ring 设置了 project.clj:

(defproject hiworld "0.1.0-SNAPSHOT"
            :description "FIXME: write this!"
            :dependencies [[org.clojure/clojure "1.3.0"]
                           [noir "1.2.2-SNAPSHOT"]]
            :dev-dependencies [[lein-ring "0.5.4"]]
            :ring {:handler hiworld.server/handler}
            :main hiworld.server)

检查它是否在本地工作:

$ lein deps
$ lein ring server-headless
# elsewhere
$ curl -I localhost:3000/welcome
HTTP/1.1 200 OK
Date: Mon, 20 Feb 2012 08:51:15 GMT
Set-Cookie: ring-session=ef00a7ad-2061-4026-9d94-3ed86ec8c46c;Path=/
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: Jetty(6.1.25)

我制造了一场战争:

$ lein ring uberwar
# builds hiworld-0.1.0-SNAPSHOT-standalone.war

到目前为止一切顺利。现在,我将它部署到码头:

$ sudo apt-get install jetty libjetty-extra
$ sudo cp hiworld-0.1.0-SNAPSHOT-standalone.war /usr/share/jetty/webapps/root.war
$ sudo chown jetty:adm /usr/share/jetty/webapps/root.war
$ sudo mv /usr/share/jetty/webapps/root /usr/share/jetty/webapps/root-orig
$ sudo /etc/init.d/jetty restart

但是:

$ curl -I localhost:8080/welcome
HTTP/1.1 404 Not Found
Date: Mon, 20 Feb 2012 08:59:27 GMT
Set-Cookie: ring-session=c255da15-6cbd-4d2c-8e17-9d120918bde9;Path=/
Content-Type: text/html; charset=utf-8
Content-Length: 363
Server: Jetty(6.1.24)

我错过了什么?据我所知,这应该就是将一个简单的网络应用程序部署到码头所需要做的一切,但显然我这里有问题。我不介意重新启动,所以我不认为我需要定义自己的上下文 - 或者我需要吗?

更新

我已经按照this 的指令序列创建了一个简单的“hello world”战争涉及 clojure,并且它按预期工作,所以看起来有些东西不完全就在 Clojure 堆栈中。

再次更新

我创建了一个最简单的环应用程序作为独立的战争并部署它。这行得通,所以看起来它是黑色特有的。

第三次更新

我创建并部署了一个 hello-world compojure 应用程序,它按预期工作。

【问题讨论】:

    标签: servlets deployment clojure jetty noir


    【解决方案1】:

    在 .war 文件中,server/load-views 不起作用,因为它在 war 中找不到物理文件。在 hiworld/server.clj 中,只需要所有提供视图的命名空间。

    文档中没有对此进行解释,但我发现 mailing list thread 解释了问题所在。

    【讨论】:

      【解决方案2】:

      我也有这个问题。我在 Noir 邮件列表 here 上找到了解决方案。

      server.clj 中我做了两件事:我删除了(server/loadviews) 调用,并将我的视图添加到所需的命名空间。

      然后我使用命令lein ring uberwar warname.war 构建了我的项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多