Единственный перезапуск проблема с Capistrano - PullRequest
13 голосов
/ 30 ноября 2011

Мы внедряем с помощью cap и используем скрипт, который отправляет USR2 в процесс единорога для перезагрузки, и он обычно работает, но время от времени он терпит неудачу. Когда это происходит, поиск в журнале единорога показывает, что он ищет Gemfile в старом каталоге выпуска, который больше не существует.

Исключение:

/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/definition.rb:14:in `build': /var/www/railsapps/inventory/releases/20111128233407/Gemfile not found (Bundler::GemfileNotFound)

Чтобы уточнить, что это не текущий выпуск, а более старый, который с тех пор был удален.

Когда он работает, кажется, что он работает правильно - то есть он подхватывает новый код - поэтому я не думаю, что он как-то застрял, ссылаясь на старый выпуск.

Есть идеи?

Ответы [ 2 ]

24 голосов
/ 18 апреля 2012

В вашем unicorn.rb добавьте блок before_exec

current_path = "/var/www/html/my project/current"

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

Подробнее об этом здесь http://blog.willj.net/2011/08/02/fixing-the-gemfile-not-found-bundlergemfilenotfound-error/

11 голосов
/ 08 декабря 2011

Вы должны установить переменную окружения BUNDLE_GEMFILE перед запуском сервера, указав на current/Gemfile.

...