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

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

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

Спасибо.


person bikashp    schedule 12.12.2011    source источник


Ответы (4)


Согласно вашему сценарию инициализации, «/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» имеет значение true, то изменения кода приложения не будут иметь никакого эффекта.

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

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

person kaji    schedule 04.01.2012
comment
Хотя это правильно, мы не можем сказать, в чем ваша проблема, не видя конфигурации единорога. По сути, если он где-то устанавливает preload_app в true, вам нужно будет использовать команду обновления И вам понадобится дополнительный код в конфигурации вашего единорога, чтобы он работал. Развертывание Google unicorn с нулевым временем простоя должно привести примеры. Если вы не установите preload_app, ваш restart будет правильным вариантом, но он полностью перезапустит сервер, в результате чего он на мгновение отключится. - person averell; 05.11.2012


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

Я понял, что, поскольку мой 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. или кто-то еще, так как это старый вопрос =)

person Paul Moff    schedule 06.10.2014

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

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 в каждом новом выпуске. Вдохновленный этим мердж-реквестом

person pastullo    schedule 31.03.2017