Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku-Clojure应用程序使用Stuart Sierra组件时出现错误;“主要”;_Heroku_Clojure - Fatal编程技术网

Heroku-Clojure应用程序使用Stuart Sierra组件时出现错误;“主要”;

Heroku-Clojure应用程序使用Stuart Sierra组件时出现错误;“主要”;,heroku,clojure,Heroku,Clojure,我正试图在heroku dyno上启动clojure应用程序,但我的stuartsierra.component/start中不断出现错误 (defrecord Listener [listener] component/Lifecycle (start [component] (assoc component :listener (yada/listener ["/"

我正试图在heroku dyno上启动clojure应用程序,但我的stuartsierra.component/start中不断出现错误

(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)]]]
                                 (or (env :port) (get (read-config "resources/config.edn" {:profile :dev}) :webserver))
                                 )))
  (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]]
  (component/start (new-system))
  (println "System Started")
  @(promise))
这是我的核心文件和所有stuartsierra.component代码。当我在笔记本电脑上本地运行它时,执行
lein repl
,然后执行
(go)
,以及执行
lein run
时,这一切都非常有效。所以当我把这个推给heroku dyno时,我很困惑为什么它不起作用

我得到的错误是

Exception in thread "main" clojure.lang.ExceptionInfo: Error in component :listener in system com.stuartsierra.component.SystemMap calling #'com.stuartsierra.component/start {:reason :com.stuartsierra.component/component-function-threw-exception, :function #'com.stuartsierra.component/start, :system-key :listener, :component #web.core.Listener{:listener nil}, :system #<SystemMap>}, compiling:(/tmp/form-init9049917434081554913.clj:1:73)
线程“main”clojure.lang.ExceptionInfo中的异常:组件中的错误:系统com.stuartsierra.component.SystemMap中的侦听器调用#'com.stuartsierra.component/start{:原因:com.stuartsierra.component/component-function-throw-exception,:function#'com.stuartsierra.component/start,:系统键:listener,:component#web.core.listener{:listener nil},:system#},编译:(/tmp/form init9049917434081554913.clj:1:73)
这告诉我,我的
:listener
系统映射中是
nil
。当我在
(keys system)中本地检查时(执行
lein repl
(go)
),则
(:listener)
,这很好,这意味着侦听器正在启动并在系统中

当我执行
(>system:listener)
时,我得到
#web.core.listener{:listener{:port 3300,:close#object[yada.aleph$listener$fn_u21671 0xa5d4865“yada.aleph$listener$fn__21671@a5d4865“],:server#object[aleph.netty$start_server$reify_uuu13574 0x3cc9a232”aleph.netty$start_server$reify__13574@3cc9a232"]}}
端口已加载(3300)且服务器已启动,这非常完美

这让我更加困惑,为什么我的heroku应用程序中的
:listener
nil


任何帮助都将不胜感激。谢谢

你的
Procfile
看起来像什么?你能在本地运行
heroku本地web
?@codefinger我的
Procfile
web:lein with profile production trampoline run-m web.core
。如果我运行
heroku本地web
,我会得到
[警告]找不到ENV文件
@codefinger我一直在尝试添加一个ENV文件,但我认为所有的ENV属性都在配置中?这很奇怪。如果您向
侦听器添加另一个显式端口,即
(或(ENV:port)(get(read-config“resources/config.edn”{:profile:dev}):webserver{:port 3300})
,会发生什么。