1

Capistranoレシピ内でQueue Classic (QC)を開始したい:

namespace :queue_classic do
  desc "Start QC worker"
  task :start, roles: :web do
    run "cd #{release_path} && RAILS_ENV=production bundle exec rake qc:work"
  end
  after "deploy:restart", "queue_classic:restart"
end

Capistrano はラインを正しく実行するため、QC ワーカーは開始しますが、デーモンとしては開始しません。その結果、Capistrano はレシピの実行を続行しません。

バックグラウンドで QC ワーカーを開始し、Capistrano にタスクを完了させるにはどうすればよいですか?

ありがとうございました!

4

2 に答える 2

2

I use foreman for this:

  after "deploy:update", "foreman:export"    # Export foreman scripts
  after "deploy:restart", "foreman:restart"   # Restart application scripts
  after "deploy:stop", "foreman:stop"   # Restart application scripts
  after "deploy:start", "foreman:start"

  # Foreman tasks

  desc 'Export the Procfile to Ubuntu upstart scripts'
  task :export, :roles => :queue do
    run "cd #{release_path}; #{sudo} $(rbenv which foreman) export upstart /etc/init -f ./Procfile -a #{application} -u #{user} -l #{release_path}/log/foreman"
  end

  desc "Start the application services"
  task :start, :roles => :queue do
    run "#{sudo} start #{application}"
  end

  desc "Stop the application services"

  task :stop, :roles => :queue do
    run "#{sudo} stop #{application}"
  end

  desc "Restart the application services"
  task :restart, :roles => :queue do
    run "#{sudo} stop #{application}"
    run "#{sudo} start #{application}"
    #run "sudo start #{application} || sudo restart #{application}"
  end

Then in your Procfile put something like

worker: RAILS_ENV=production bundle exec rake qc:work
于 2013-05-25T01:58:50.153 に答える
0

and で & 記号を使用し、プロセスをバックグラウンドにします。

run "cd #{release_path} && RAILS_ENV=production bundle exec rake qc:work &"

強制終了と再起動は少しトリッキーですが、 、 、 を使用して実行psできgrepますkill

于 2013-01-30T07:43:06.043 に答える