Skip to main content
 首页 » 编程设计

servlets之在挤压 jetty 上部署黑色 war 时出现 404

2024年08月05日7Terrylee

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

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

$ 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:

(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) 

我发动了一场 war :

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

到目前为止一切都很好。现在,我将其部署到 jetty :

$ 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) 

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

更新

我关注了this创建一个简单的“hello world” war 的指令序列根本不涉及 clojure,并且它按预期工作,因此 clojure 堆栈似乎有些不太正确。

再次更新

我创建了最简单的环形应用程序作为独立的 war 并部署了它。这很有效,所以看起来它是黑色电影特有的东西。

第三次更新

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

请您参考如下方法:

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

文档中没有对此进行解释,但我找到了 mailing list thread解释什么是错误的。