我有一种感觉,我错过了一些明显的东西,但我不知道从哪里开始寻找。
我有一个新的黑色应用程序,因此创建:
$ 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}))
我将project.clj设置为ring:
(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应用程序,该应用程序按预期工作。
答案 0 :(得分:3)
在.war文件中,server / load-views不起作用,因为它无法在战争中找到物理文件。在hiworld / server.clj中,只需要提供视图的所有命名空间。
这在文档中没有解释,但我发现mailing list thread解释了什么是错误的。
答案 1 :(得分:2)
我也有这个问题。我在Noir邮件列表here找到了解决方案。
在server.clj
我做了两件事:我删除了(server/loadviews)
调用,并将我的视图添加到了所需的命名空间。
然后我使用命令lein ring uberwar warname.war
构建了我的项目。