heroku

rb1719 2017-03-13T16:39:53.027687Z

I am trying to start my clojure application on my heroku dyno but I keep getting and error in my stuartsierra.component/start.

rb1719 2017-03-13T16:40:07.034159Z

(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))

rb1719 2017-03-13T16:40:35.047083Z

This is my core file with all my stuartsierra.component code. This all works perfectly when I run it locally on my laptop doing lein repl and then (go) and also when I just do lein run. So I am confused as to why it doesn't work when I push this to the heroku dyno.

rb1719 2017-03-13T16:40:56.056594Z

The error I get is

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 <#C2TLV30Q1|web>.core.Listener{:listener nil}, :system #&lt;SystemMap&gt;}, compiling:(/tmp/form-init9049917434081554913.clj:1:73)

rb1719 2017-03-13T16:41:35.074524Z

This is telling me that my :listener is nil in the system-map. When I check locally (doing lein repl (go)) in (keys system) is (:listener) which is good so that means that the listener is starting and is in the system.

rb1719 2017-03-13T16:41:56.084326Z

When I do (-&gt; system :listener) I get

#web.core.Listener{:listener {:port 3300, :close #object[yada.aleph$listener$fn__21671 0xa5d4865 "yada.aleph$listener$fn__21671@a5d4865"], :server #object[aleph.netty$start_server$reify__13574 0x3cc9a232 "aleph.netty$start_server$reify__13574@3cc9a232"]}}
which is perfect as the port has loaded up (3300) and the server has started.

rb1719 2017-03-13T16:42:12.091553Z

This makes it all the more confusing as to why the :listener is nil in my heroku app Any help would be much appreciated. Thanks