私のアプリを起動するのに少し問題があります。Clojure - StuartSierraComponent Start
は、ここに私のcore.clj
(ns myapp.core
(:require [yada.yada :as yada :refer [resource as-resource]]
[yada.resources.file-resource :refer [new-directory-resource]]
[aero.core :refer [read-config]]
[web.view :as view]
[web.routes :as routes]
[clojure.java.io :as io]
[aero.core :refer [read-config]]
[com.stuartsierra.component :as component]
[clojure.java.jdbc :as jdbc]
[clojure.tools.namespace.repl :refer (refresh)]
[ring.adapter.jetty :as jetty]
[environ.core :refer [env]]))
(defrecord Listener [listener]
component/Lifecycle
(start [component]
(assoc component :listener (yada/listener
["/"
[(view/view-route)
routes/route-handler
["public/" (new-directory-resource (io/file "target/cljsbuild/public") {})]
[true (as-resource nil)]]] )))
(stop [component]
(when-let [close (-> component :listener :close)]
(close))
(assoc component :listener nil)))
(defn new-system []
(component/system-map
:listener (map->Listener {})
))
(def system nil)
(defn init []
(alter-var-root #'system
(constantly (new-system))))
(defn start []
(alter-var-root #'system component/start))
(defn stop []
(alter-var-root #'system
(fn [s] (when s (component/stop s)))))
(defn go []
(init)
(start))
(defn reset []
(stop)
(refresh :after 'web.core/go))
(defn -main
[& [port]]
(let [port (Integer. (or port (env :port) 3300))]
(jetty/run-jetty (component/start (new-system)) {:port port :join? false})))
私はスチュアートSierraのライブラリ、コンポーネントをテストしています。私はlein repl
と(go)
をすれば
は私がアプリを起動することができますが、私は(私は生産にそれを展開した場合、アプリケーションがどのようなものであるか確認するために)lein run
を実行して、私のアプリを起動しようとしています。私は、ブラウザでlein run
を行うと、私はエラー
HTTP ERROR: 500
Problem accessing /view. Reason:
com.stuartsierra.component.SystemMap cannot be cast to clojure.lang.IFn
を取得(new-system
で)システム・マップは誤りである理由を私は知らないので、私は混乱しています。私はまた、エラーが何を意味するかわからないので、私はそれを修正する方法がわからない
誰かが助けてくれますか?ありがとう
この問題は、新しいrepl(emacsからのジャンクイン)を開始し、myapp.core名前空間に変更し、 '(-main" 8080 ")'を評価することで再現できますか? –