Перезапуск/обновление 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 пакета в каждой новой версии.
Воспользовавшись этот запрос слияния