upstart + bluepill + единорог и delayed_job с rvm и bundler: `exec ': нет такого файла или каталога - PullRequest
0 голосов
/ 05 января 2012

Я немного борюсь с повторной загрузкой процессов единорога и delayed_job.Я решил использовать bluepill в качестве общего менеджера, так как это легко можно запустить с помощью upstart в Ubuntu.Я создал оболочку RVM для bluepill, и скрипт upstart хорошо работает (запускается и останавливается с легкостью:

# bluepill - process monitor
#
# simple process monitoring tool

description "simple process monitoring tool"

start on started nginx
stop on stopping nginx

expect daemon
#respawn

exec bootup_bluepill load /home/deployer/apps/nzswarranty/current/config/production.pill

Далее идет файл конфигурации bluepill:

Bluepill.application("nzswarranty", :log_file => "/var/log/bluepill.log") do |app|
  app.working_dir = '/home/deployer/apps/nzswarranty/current'
  app.uid = "deployer"
  app.gid = "staff"

  app.process("unicorn") do |process|
    process.start_command = "bundle exec unicorn_rails -c config/unicorn.rb -D"
    process.stop_command  = "kill -s QUIT `cat /tmp/unicorn.nzswarranty.pid`"
    process.restart_command  = "kill -s USR2 `cat /tmp/unicorn.nzswarranty.pid`"
    process.pid_file = '/tmp/unicorn.nzswarranty.pid'
    process.start_grace_time = 15.seconds
    process.stop_grace_time = 15.seconds
  end

  app.process("delayed_job") do |process|
    process.environment = { 'RAILS_ENV' => 'production' }
    process.start_command = 'script/delayed_job start'
    process.stop_command  = 'script/delayed_job stop'
    process.pid_file = '/home/deployer/apps/nzswarranty/shared/pids/delayed_job.pid'
    process.start_grace_time = 15.seconds
    process.stop_grace_time = 15.seconds
  end

end

СерверУ меня установлен общесистемный RVM и пакет, управляющий гемами. Я должен упомянуть, что это приложение Rails 3.1.

В основном, когда я запускаю bluepill без запуска delayed_job, я получаю это при попытке загрузить его:*

W, [2012-01-05T13:37:55.185626 #28201]  WARN -- : [nzswarranty:delayed_job] Start command execution returned non-zero exit code:
W, [2012-01-05T13:37:55.185780 #28201]  WARN -- : [nzswarranty:delayed_job] {:stdout=>"", :stderr=>"/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': no such file to load -- bundler/setup (LoadError)\n\tfrom /usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'\n\tfrom /home/deployer/apps/nzswarranty/current/config/boot.rb:6:in `<top (required)>'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom /home/deployer/apps/nzswarranty/current/config/application.rb:1:in `<top (required)>'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom /home/deployer/apps/nzswarranty/current/config/environment.rb:2:in `<top (required)>'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom <internal:lib/rubygems/custom_require>:29:in `require'\n\tfrom script/delayed_job:3:in `<main>'\n", :exit_code=>1}
I, [2012-01-05T13:37:55.186003 #28201]  INFO -- : [nzswarranty:delayed_job] Going from down => starting

Я также пытался использовать bundle exec для этого, и он просто говорит, что не может найти исполняемый файл bundle. Я подозреваю, что среда загружается неправильно. Любые советы? У меня есть RVMgemset, который загружается из файла .rvmrc в корне проекта. Должен ли я переключаться на этот gemset в конфигурации bluepill?

1 Ответ

0 голосов
/ 13 января 2012

Хорошо, в конце концов, это было довольно легко. Я думаю, что произошло то, что я установил bluepill в глобальном наборе гемов rvm от имени пользователя root, а также создал свою оболочку для использования глобального набора гемов в среде (то есть bluepill запустился нормально, но в моем собственном наборе гемов он не увидел других драгоценных камней) (гарантия)). Я в основном удалил bluepill из глобального набора гемов и установил его в гарантийный набор. Затем я снова создал оболочку:

rvmsudo rvm wrapper ruby-1.9.2-p290@warranty bootup bluepill

Я также столкнулся с еще одной странной ошибкой при попытке загрузить единорога, но понял, что не передаю RAILS_ENV. Вот мой последний .pill:

Bluepill.application("nzswarranty", :log_file => "/var/log/bluepill.log") do |app|
    app.working_dir = '/home/deployer/apps/nzswarranty/current'
    app.uid = 'deployer'
    app.gid = 'staff'
    app.environment = { 'RAILS_ENV' => 'production' }

    app.process("unicorn") do |process|
        process.start_command = "bundle exec unicorn_rails -c config/unicorn.rb -D"
        process.stop_command  = "kill -s QUIT `cat /tmp/unicorn.nzswarranty.pid`"
        process.restart_command  = "kill -s USR2 `cat /tmp/unicorn.nzswarranty.pid`"
        process.pid_file = '/tmp/unicorn.nzswarranty.pid'
        process.start_grace_time = 30.seconds
        process.stop_grace_time = 30.seconds
    end

    app.process("delayed_job") do |process|
        process.start_command = 'bundle exec script/delayed_job start'
        process.stop_command  = 'bundle exec script/delayed_job stop'
        process.pid_file = '/home/deployer/apps/nzswarranty/shared/pids/delayed_job.pid'
        process.start_grace_time = 30.seconds
        process.stop_grace_time = 30.seconds
    end
end

Важно отметить, что нам нужно использовать bundle exec перед другими нашими командами, чтобы мы загружали полный набор гемов из Gemfile.

...