2015-01-03 4 views
2

У меня есть небольшой 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?

+0

lein - это инструмент построения, и он и его плагины не включены в развертывание, если они явно не указаны в качестве зависимостей (плагины предназначены только для времени dev/build, а не для развертывания). – noisesmith

+0

Я действительно не геройку, но все, что я вижу с быстрым поиском, говорит мне, что герой ожидает, что ваше приложение будет иметь рабочий '-main'. lein плагины для запуска вашего приложения великолепны в разработке, но вы не должны рассчитывать на них на вашем развернутом сервере. – noisesmith

ответ

3

Ваше PROCFILE должно быть что-то вроде этого:

web: lein ring server-headless $PORT 

Чтобы проверить приложение может работать должным образом на Heroku, вы можете использовать бригадир порт, что делает использование PROCFILE.

В настоящее время я использую gaffer, а документация по Procfile для Heroku - here.

Смежные вопросы