Вопросы для начинающих по развертыванию Heroku Clojure - PullRequest
1 голос
/ 29 декабря 2011

Я пытался запустить приложение Compojure / Ring в стеке Heroku Cedar (но не получилось). Я следовал этим инструкциям

Сначала я развернул B), затем, казалось, успешно запустил веб-динамо C). Но я ничего не вижу при переходе по URL моего приложения. Запуск heroku ps отображает запущенные процессы, но я не могу получить доступ к своему приложению из Интернета. Что-то конкретно я пропускаю? Нужно ли использовать мастер ветку git? Если я использую lein run в моем Procfile (я пробовал несколько команд), как Heroku (или мастер) узнает, какой обработчик http нужно запустить (снова приложение Compojure / Ring)?

B)


    $ git push heroku  
    Counting objects: 4, done.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 293 bytes, done.
    Total 3 (delta 1), reused 0 (delta 0)
    To git@heroku.com:high-night-9597.git
       36e7c18..050ea6d  account-chooser -> 

C)


    $ heroku ps:scale web=1
    Scaling web processes... done, now running 1

D)


    $ heroku ps
    Process  State             Command        
    -------  ----------------  ---------  
    run.1    complete for 11m  lein repl  
    web.1    created for 8m                   

E)


    $ heroku run lein repl
    Running lein repl attached to terminal... up, run.1 

F) Procfile:


    -web: lein exec src/.clj
    +web: lein run 

Ответы [ 3 ]

2 голосов
/ 29 декабря 2011

Вы можете использовать любую понравившуюся вам ветку, однако вам нужно указать, какую ветку вы хотите перенести в heroku - если вы уже не в этой ветке:

$ git push heroku your_branch_name

При условии, что ваше приложение работает нормально локально, Heroku знает, как запустить его, основываясь на том, что у вас есть в вашем Procfile, в котором, по-видимому, чего-то не хватает.

Скажем, ваш основной обработчик меньше $YOUR_APP_ROOT/src/my-clj-app/core.clj.

Тогда ваш Procfile должен выглядеть примерно так:

web: lein run -m my-clj-app.core

Вот как Heroku знает, как запустить ваше приложение.

Убедитесь, что файл имеет правильное определение пространства имен:

(ns my-clj-app.core)

Можете ли вы попробовать?

1 голос
/ 02 января 2012

Я тоже новичок, но я постараюсь поделиться некоторыми проблемами, с которыми я столкнулся.
Если это ошибка порта, как вы и подозревали, правильно ли вы установили порт?

(ns demo.web
  (:use ring.adapter.jetty))  

(defn app [req]
  {:status 200
   :headers {"Content-Type" "text/plain"}
   :body "Hello, world"})  

(defn -main []
  (let [port (Integer/parseInt (System/getenv "PORT"))]
  (run-jetty app {:port port})))

Я перечислю некоторые проблемы, с которыми я столкнулся, возможно, это может помочь вам.

Procfile

Procfile должен выглядеть следующим образом:
web: lein run -m http.handler
, а не
'web: lein run -m http.handler'
Если Procfile обнаружен правильно, вы должны увидеть это:
Выход Heroku
-----> Discovering process types
Procfile declares types -> web ;; <- This line should appear
-----> Compiled slug size is 14.2MB
-----> Launching... done, v15

"lein repl" конфликтует с "web dyno"

Я также заметил проблему (ошибку?), Когда я запускал lein repl перед тем, как запустить веб-dyno.Вы должны сначала попытаться отключить «repl»:
heroku ps:stop run.1
, а затем запустить веб-dyno:
heroku ps:scale web=1.

Должно существовать хотя бы 1 веб-dyno

Если вы случайно выключили веб-динамо:
heroku ps:scale web=0
Heroku не запустит веб-динамо автоматически при следующем нажатии на Heroku.Поэтому убедитесь, что у вас работает веб-динамо перед тем, как вы отправитесь на героку.Вы также можете запустить веб-динамо после совершения.

Справочное руководство

Для меня я смог успешно следовать этому красиво написанному руководству - http://thecomputersarewinning.com/post/clojure-heroku-noir-mongo. Если вы используете Noir 1.2.2, вам необходимо удалить:
(:require [myapp.views.noir.content.getting-started] :as content)
из "welcome.clj".

0 голосов
/ 31 декабря 2011

Это продолжение вопроса.Как отмечалось в предыдущих комментариях, я смог передать свое приложение мастеру Heroku, и оно его развернуло.

Но когда я пытаюсь перейти по URL моего приложения, я получаю сообщение об ошибке ниже.Это странная ошибка порта, но я не думал, что смогу контролировать эти детали при развертывании приложения Clojure на Heroku.Я думаю, что моя установка довольно проста.Что я могу сделать, чтобы исправить эту ошибку?

Procfile


    web: lein run -m http.handler

http.handler


    ...
    (def app
      (handler/site main))

Ошибка


    2011-12-31T04:10:02+00:00 app[web.1]: Listening for transport dt_socket at address: 41208
    2011-12-31T04:10:03+00:00 heroku[web.1]: Stopping process with SIGKILL
    2011-12-31T04:10:03+00:00 heroku[web.1]: Error R11 (Bad bind) -> Process bound to port 41208, should be 55032 (see environment variable PORT)
    2011-12-31T04:10:04+00:00 heroku[web.1]: State changed from starting to crashed
    2011-12-31T04:10:05+00:00 heroku[web.1]: Process exited
    2011-12-31T04:20:08+00:00 heroku[web.1]: State changed from crashed to created
    2011-12-31T04:20:08+00:00 heroku[web.1]: State changed from created to starting
    2011-12-31T04:20:12+00:00 heroku[web.1]: Starting process with command `lein run -m http.handler`
    2011-12-31T04:20:16+00:00 app[web.1]: Listening for transport dt_socket at address: 49151
    2011-12-31T04:20:16+00:00 heroku[web.1]: Error R11 (Bad bind) -> Process bound to port 49151, should be 39092 (see environment variable PORT)
    2011-12-31T04:20:16+00:00 heroku[web.1]: Stopping process with SIGKILL
    2011-12-31T04:20:17+00:00 heroku[web.1]: State changed from starting to crashed
    2011-12-31T04:20:18+00:00 heroku[web.1]: Process exited
    2011-12-31T04:31:13+00:00 heroku[web.1]: State changed from crashed to created
    2011-12-31T04:31:13+00:00 heroku[web.1]: State changed from created to starting
    2011-12-31T04:31:16+00:00 heroku[web.1]: Starting process with command `lein run -m http.handler`
    2011-12-31T04:31:20+00:00 app[web.1]: Listening for transport dt_socket at address: 44321
    2011-12-31T04:31:20+00:00 heroku[web.1]: Error R11 (Bad bind) -> Process bound to port 44321, should be 17211 (see environment variable PORT)
    2011-12-31T04:31:20+00:00 heroku[web.1]: Stopping process with SIGKILL
    2011-12-31T04:31:22+00:00 heroku[web.1]: State changed from starting to crashed
    2011-12-31T04:31:22+00:00 heroku[web.1]: Process exited
    2011-12-31T04:44:59+00:00 heroku[web.1]: State changed from crashed to created
    2011-12-31T04:44:59+00:00 heroku[web.1]: State changed from created to starting
    2011-12-31T04:45:02+00:00 heroku[web.1]: Starting process with command `lein run -m http.handler`
    2011-12-31T04:45:05+00:00 app[web.1]: Listening for transport dt_socket at address: 37500
    2011-12-31T04:45:06+00:00 heroku[web.1]: Error R11 (Bad bind) -> Process bound to port 37500, should be 14046 (see environment variable PORT)
    2011-12-31T04:45:06+00:00 heroku[web.1]: Stopping process with SIGKILL
    2011-12-31T04:45:07+00:00 heroku[web.1]: State changed from starting to crashed
    2011-12-31T04:45:07+00:00 heroku[web.1]: Process exited
    2011-12-31T04:49:22+00:00 heroku[router]: Error H10 (App crashed) -> GET bkeeping.herokuapp.com/ dyno= queue= wait= service= status=503 bytes=
    2011-12-31T04:49:31+00:00 heroku[router]: Error H10 (App crashed) -> GET bkeeping.herokuapp.com/favicon.ico dyno= queue= wait= service= status=503 bytes=

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...