У меня есть небольшой Clojure webapp, построенный с кольцом и compojure. Несмотря на то, что webapp работает локально на моем ноутбуке, когда я нажимаю на Heroku, приложение падает. Специфическая ошибка из бревенПриложение Compojure работает локально, но не может найти основной класс lein при его развертывании в Heroku
Starting process with command `java $JVM_OPTS lein ring server-headless 3000`
app[web.1]: Error: Could not find or load main class lein
app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx384m -Djava.rmi.server.useCodebaseOnly=true
heroku[web.1]: State changed from starting to crashed
Мой project.clj
выглядеть
(defproject hn-clj "0.1.1"
:description "foo"
:url "http://foo"
:min-lein-version "2.0.0"
:dependencies [[org.clojure/clojure "1.6.0"]
[compojure "1.3.1"]
[ring/ring-defaults "0.1.2"]
[clj-http-lite "0.2.0"]
[cheshire "5.4.0"]
[hiccup "1.0.5"]]
:plugins [[lein-ring "0.8.13"]]
:ring {:handler hn-clj.core.handler/app}
:profiles
{:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
[ring-mock "0.1.5"]]}}
)
точка входа для приложения в src/core/handler.clj
(ns hn-clj.core.handler
(:require [compojure.core :refer :all]
[compojure.route :as route]
[compojure.handler :as handler]
[ring.middleware.defaults :refer [wrap-defaults site-defaults]]
[hn-clj.core.controllers.story :as story]
[hn-clj.core.controllers.users :as users]
))
(defroutes app-routes
(GET "/" [limit] (story/index limit))
(GET "/stories/:id" [id] (story/show-story id))
(GET "https://stackoverflow.com/users/:username" [username] (users/show username)))
(def app
(wrap-defaults app-routes site-defaults))
локально приложение работает поиск с lein ring server-headless 3000
и в моем Procfile
Я положил
web: java $JVM_OPTS lein ring server-headless 3000
Хотя я не создал main-
функции, это не запрещает приложение от работы на местном уровне, я не понимаю, почему приложение не будет работать при развертывании на Heroku. Как мне реорганизовать handler.clj
или Procfile
?
lein - это инструмент построения, и он и его плагины не включены в развертывание, если они явно не указаны в качестве зависимостей (плагины предназначены только для времени dev/build, а не для развертывания). – noisesmith
Я действительно не геройку, но все, что я вижу с быстрым поиском, говорит мне, что герой ожидает, что ваше приложение будет иметь рабочий '-main'. lein плагины для запуска вашего приложения великолепны в разработке, но вы не должны рассчитывать на них на вашем развернутом сервере. – noisesmith