2012-02-20 5 views
6

Ho la sensazione che mi sia sfuggita qualcosa di ovvio qui, ma non so da dove cominciare a cercare.404s quando si distribuisce una guerra noir al molo sulla spremuta

Ho un app noir fresco, creato nel seguente modo:

$ lein noir new hiworld 

aggiungo un nuovo gestore pagina 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})) 

ho creato project.clj per anello:

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

check funziona a livello locale:

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

costruisco una guerra:

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

Tutto bene finora. Ora, schiero al molo:

$ 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 

Ma:

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

Cosa mi sono perso? Per quanto posso dire, dovrebbe essere tutto ciò che devo fare per distribuire una banale web-app al molo, ma evidentemente ho qualcosa di sbagliato qui. Non mi dispiace il riavvio, quindi non lo so penso Ho bisogno di definire il mio contesto - o io?

UPDATE

Ho seguito this sequenza di istruzioni per creare un semplice "ciao mondo" guerra non coinvolge clojure a tutti, e funziona come previsto, quindi sembrerebbe che c'è qualcosa che non Piuttosto bene con lo stack del clojure.

nuovamente aggiornato

ho creato la più semplice applicazione anello possibile come una guerra autonomo e distribuito esso. Questo ha funzionato, quindi sembra che sia qualcosa di noir specifico.

aggiornato un TERZA VOLTA

ho creato e implementato un'applicazione compojure ciao-mondo, che ha lavorato come previsto.

risposta

2

Ho anche avuto questo problema. Ho trovato la soluzione sulla mailing list Noir here.

In server.clj Ho fatto due cose: ho rimosso la chiamata (server/loadviews) e aggiunto le mie viste agli spazi dei nomi richiesti.

Ho quindi creato il mio progetto con il comando lein ring uberwar warname.war.

3

In un file .war, il server/load-view non funziona perché non riesce a trovare i file fisici in guerra. In hiworld/server.clj, è sufficiente richiedere tutti i namespace che forniscono viste.

Questo non è spiegato nei documenti ma ho trovato un mailing list thread che spiega cosa c'è che non va.