Выполнение чего-либо побочного эффекта на верхнем уровне очень подозрительно - этот код выполняется как при компиляции, так и при выполнении, поэтому, вероятно, автоматический uberjar, который Heroku делает, не работает, потому что redis недоступен во время компиляции, или что-то вроде тот.
Вместо этого инициализируйте ваш клиент Redis после вызова -main
, что обеспечит вам работу в производственной среде. Это можно сделать несколькими способами, например, сначала определив его как nil, а затем выполнив alter-var-root
в -main
. Мое предпочтительное решение, вероятно, будет что-то вроде:
(def r (delay (redis-client ...)))
(defn get-stuff []
(let [client @r] ...))
(defn -main [& args]
(get-stuff)
...)
Теперь код для подключения не выполняется до тех пор, пока кто-то не разыграет клиент, что им никогда не следует делать до тех пор, пока приложение не будет запущено.