Перезапуск / обновление Unicorn не работает - PullRequest
10 голосов
/ 12 декабря 2011

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

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

Спасибо.

Ответы [ 4 ]

12 голосов
/ 04 января 2012

Согласно вашему скрипту инициализации, "/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 повторно запускает исполняемый двоичный файл. Отдельный выход должен быть отправлен исходному процессу, как только будет подтверждено, что ребенок запущен и работает.

10 голосов
/ 12 ноября 2012

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

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

 before_exec do |server|
    ENV['BUNDLE_GEMFILE'] = "#{root}/Gemfile"
 end 
2 голосов
/ 06 октября 2014

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

0 голосов
/ 31 марта 2017

Я исправил эту проблему, изменив сценарий 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"

, которое, по-видимому, указывает на новый гемфайл пакета в каждом новом выпуске,Принимая вдохновение от этот запрос на слияние

...