首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >莱茵环uberjar

莱茵环uberjar
EN

Stack Overflow用户
提问于 2014-04-22 14:15:46
回答 1查看 2.3K关注 0票数 3

我在Clojure中构建了一个非常简单的web应用程序(实际上,我遵循了一个教程)。project.clj文件如下所示:

代码语言:javascript
复制
(defproject webdev "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
                :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [ring "1.2.2"]
                 [hiccup "1.0.5"]
                 [compojure "1.1.6"]
                 [org.clojure/java.jdbc "0.3.3"]
                 [postgresql/postgresql "9.1-901.jdbc4"]]

  :plugins [[lein-ring "0.8.10"]]

  :ring {:handler (webdev.core/-main)
         :port 8000}

  :uberjar-name "webdev.jar"

  :main webdev.core

  :aot [webdev.core]

  :profiles {:dev
                 {:main webdev.core/-dev-main}})

我的主要webdev/core.clj的相关部分如下所示:

代码语言:javascript
复制
(defroutes routes
  (GET "/about" [] about)
  (ANY "/request" [] handle-dump)

  (GET "/items" [] handle-index-items)
  (POST "/items" [] handle-create-item)
  (DELETE "/items/:item-id" [] handle-delete-item)
  (PUT "/items/:item-id" [] handle-update-item)

  (not-found "Page not found."))


(defn wrap-db [hndlr]
  (fn [req]
    (hndlr (assoc req :webdev/db db))))

(defn wrap-server-header [hndlr]
  (fn [req]
    (hndlr (assoc req :webdev/db db))))

(defn wrap-server-response [hndlr]
  (fn [req]
    (let [response (hndlr req)]
      (assoc-in response [:headers "Server:"] "my-server"))))


(def sim-methods {"PUT" :put
                  "DELETE" :delete})

(defn wrap-simulated-methods [hndlr]
  (fn [req]
    (if-let [method (and (= :post (:request-method req))
                         (sim-methods (get-in req [:params "_method"])))]
      (hndlr (assoc req :request-method method))
      (hndlr req))))

(def app
  (wrap-file-info
   (wrap-resource
    (wrap-server-response
     (wrap-db
      (wrap-params
       (wrap-simulated-methods routes)))) "static")))

(defn -main [& [port]]
  (items/create-table db)
  (jetty/run-jetty #'app                     
        {:port (if port (Integer/parseInt port) 
                   (Integer/parseInt (System/getenv "PORT")))}))

(defn -dev-main [port]
  (items/create-table db)
  (jetty/run-jetty (wrap-reload #'app)       {:port (Integer. port)}))

....

如果我在我的项目上运行Lein ring serverLein ring uberjar,我会得到以下错误:

代码语言:javascript
复制
java.lang.ClassCastException: clojure.lang.PersistentList 
cannot be cast to clojure.lang.Named

如果我运行Lein run 8000。它工作正常,我可以浏览到localhost:8000。

我的莱宁根版本是:

代码语言:javascript
复制
Leiningen 2.3.4 on Java 1.6.0_26 Java HotSpot(TM) 64-Bit Server VM

有人知道怎么回事吗?

你好,西蒙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-22 17:39:53

看上去不太对劲。

代码语言:javascript
复制
 :ring {:handler (webdev.core/-main)
         :port 8000}

(webdev.core/- main )意味着运行您的主要功能,并将主函数的结果委托给环插件作为处理程序。

试着用更像这样的东西当使用莱茵戒指..。

代码语言:javascript
复制
 :ring {:handler webdev.core/app
         :port 8000}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23222145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档