更新:自从最初的一组评论者留下回复以来,这个问题已经改变。对任何混淆表示歉意。
这是我的代码存储库https://github.com/Integralist/spurious-clojure-example您可以将其用作我正在使用的示例。
请注意,上述 repo 依赖于我尚未发布到 Clojars 的库(因为我仍在测试它 - 因此打开了这个问题)。您可以在此处查看该库的源代码:https ://github.com/Integralist/spurious-clojure-aws-sdk-helper
lein ring server
我有一个用 Compojure 编写的“hello world”Clojure Web 应用程序,我在使用and运行时运行良好lein run
(因为我-main
现在创建了一个函数)。当编译成 jar 并运行java -jar app.jar
.
我现在的问题是,如果我尝试java -jar app.jar
从 Docker 容器中运行默认值,我会收到以下错误告诉我...
spurious-clojure-example is starting
2015-02-14 00:58:03.812:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT
2015-02-14 00:58:03.854:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
Started server on port 8080
Exception in thread "main" java.awt.HeadlessException:
我的代码目前正在使用-main
这样的函数......
(ns spurious-clojure-example.repl
(:use spurious-clojure-example.handler
ring.server.standalone
[ring.middleware file-info file])
(:gen-class))
(defonce server (atom nil))
(defn get-handler []
(-> #'app
(wrap-file "resources")
(wrap-file-info)))
(defn start-server
"used for starting the server in development mode from REPL"
[& [port]]
(let [port (if port (Integer/parseInt port) 8080)]
(reset! server
(serve (get-handler)
{:port port
:init init
:auto-reload? true
:destroy destroy
:join true}))
(println (str "You can view the site at http://localhost:" port))))
(defn stop-server []
(.stop @server)
(reset! server nil))
(defn -main []
(start-server))
...但是如何让服务器无头启动?我不能完全按照 Compojure 样板代码来破译它在哪里或如何知道何时无头运行或通过浏览器运行?
我知道在命令行上你可以这样做lein ring server-headless
,那么程序化的等价物是什么?