更新: この質問は、元の一連のコメント投稿者が回答を残してから変更されました。混乱をお詫び申し上げます。
これは私のコード リポジトリhttps://github.com/Integralist/spurious-clojure-exampleで、私が取り組んでいるものの例として使用できます。
上記のリポジトリは、Clojars にまだ公開していないライブラリに依存していることに注意してください (まだテストしているため、この質問が開かれました)。ここでライブラリのソースコードを見ることができます: https://github.com/Integralist/spurious-clojure-aws-sdk-helper
私は Compojure で書かれた "hello world" Clojure Web アプリを持ってlein ring serverい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、それと同等のプログラムは何ですか?