sag*_*kar 5 ruby capistrano ruby-on-rails-3 sidekiq
我想用capistrano开始sidekiq.下面是代码
namespace :sidekiq do
task :start do
run "cd #{current_path} && bundle exec sidekiq -c 10 -e production -L log/sidekiq.log &"
p capture("ps aux | grep sidekiq | awk '{print $2}' | sed -n 1p").strip!
end
end
Run Code Online (Sandbox Code Playgroud)
它成功执行但仍未在服务器上启动sidekiq.
输出:
$ cap sidekiq:start
triggering load callbacks
* 2014-06-03 15:03:01 executing `sidekiq:start'
* executing "cd /home/project/current && bundle exec sidekiq -c 10 -e production -L log/sidekiq.log &"
servers: ["x.x.x.x"]
[x.x.x.x] executing command
command finished in 1229ms
* executing "ps aux | grep sidekiq | awk '{print $2}' | sed -n 1p"
servers: ["x.x.x.x"]
[x.x.x.x] executing command
command finished in 1229ms
"19291"
Run Code Online (Sandbox Code Playgroud)
你的问题在于:
cd /home/project/current && bundle exec sidekiq -c 10 -e production -L log/sidekiq.log &
Run Code Online (Sandbox Code Playgroud)
当您&在结束时添加命令时,将在单独的进程中执行,但此进程仍然是当前进程的子进程,并在当前进程停止时终止.相反,你需要运行sidekiq作为deamon.
bundle exec sidekiq -c 10 -e production -L log/sidekiq.log -d
Run Code Online (Sandbox Code Playgroud)
请注意额外-d选项
在不使用任何宝石的情况下,这是我的解决方案与Capistrano 3.4.0完美配合的方法
namespace :sidekiq do
task :restart do
invoke 'sidekiq:stop'
invoke 'sidekiq:start'
end
before 'deploy:finished', 'sidekiq:restart'
task :stop do
on roles(:app) do
within current_path do
pid = p capture "ps aux | grep sidekiq | awk '{print $2}' | sed -n 1p"
execute("kill -9 #{pid}")
end
end
end
task :start do
on roles(:app) do
within current_path do
execute :bundle, "exec sidekiq -e #{fetch(:stage)} -C config/sidekiq.yml -d"
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7566 次 |
| 最近记录: |