Перезапуск/обновление Unicorn не работает

Ниже приведена ссылка на мой init script для единорога. https://gist.github.com/1466775

Команда перезагрузки никогда не работала для меня. Я использую обновление для перезапуска единорога после каждого развертывания. Но всякий раз, когда происходят значительные изменения, такие как добавление новых камней, обновление не будет работать. Недавно я заменил жемчужину hoptoad воздушным тормозом, и он ошибается, говоря "неинициализированный постоянный Airbrake (NameError)". Но когда я остановился и снова начал единорог, он работал нормально. Проблема заключается в инициализации script или ее различных проблемах?

Спасибо.

Ответ 1

В соответствии с вашим init script, "/bin/init.d/unicorn restart" отправляет сигнал HUP в мастер-процесс единорога

------ обрезается

restart|reload)
    sig HUP && echo reloaded OK && exit 0
    echo >&2 "Couldn't reload, starting '$CMD' instead"
    su - $USER -c "$CMD"

----- обрезается

Это то, что HUP делает для процесса единорога:

перезагружает конфигурационный файл и изящно перезапускает всех работников. Если директива preload_app имеет значение false (по умолчанию), тогда работники также будут получать изменения кода приложения при перезапуске. Если "preload_app" истинно, изменения кода приложения не будут иметь эффекта.

Что вы ищете - это сигнал USR2, который уже делает ваш параметр обновления для единорога!

Сигнал USR2 повторяет исполняемый двоичный файл. Отдельный QUIT должен быть отправлен в исходный процесс, как только ребенок будет проверен на запуск и запуск.

Ответ 2

У меня была очень похожая проблема, и, наконец, нашел решение

Я просматривал журналы раньше, но явно не видел ошибку (Bundler::GemfileNotFound). Оказывается, есть старые ссылки на более ранние выпуски, и как только файл gem изменяется, новый мастер бесшумно терпит неудачу. Хвост - ваш журнал единорога, чтобы узнать, что произойдет. Мои проблемы были исправлены по ссылке со следующим в моем unicorn.rb

 before_exec do |server|
    ENV['BUNDLE_GEMFILE'] = "#{root}/Gemfile"
 end 

Ответ 3

У меня была такая же проблема, но я использовал rbenv, который был установлен для каждого пользователя. Я использовал init script

Я понял, что, поскольку мой rbenv установлен для каждого пользователя, мне нужно немного изменить это:

CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"

с этим:

CMD="cd $APP_ROOT; ~/.rbenv/bin/rbenv exec bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"

Надеюсь, это поможет вам!

P.S. или кто-то еще, так как это старый вопрос =)

Ответ 4

Я исправил эту проблему, изменив мой unicorn init.d script из

CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E staging"

:

CMD="cd $APP_ROOT; BUNDLE_GEMFILE=$APP_ROOT/Gemfile bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E staging"

Что, кажется, указывает на новый gemfile пакета в каждой новой версии. Воспользовавшись этот запрос слияния