当Capistrano

时间:2018-01-05 14:58:56

标签: ruby-on-rails ruby capistrano sidekiq

我正在努力通过自定义v2 capistrano任务远程启动sidekiq:

namespace :sidekiq do
  desc "Start sidekiq"
  task :start do
    run "cd #{current_path} && bundle exec sidekiq --version"
    run "cd #{current_path} && bundle exec sidekiq --environment production --daemon --config config/sidekiq.yml && echo OK"
  end
end

输出:

  * 2018-01-05 11:40:51 executing `sidekiq:start'
  * executing "cd /home/deploy/applications/xxx/current && bundle exec sidekiq --version"
    servers: ["198.58.110.211"]
    [198.58.110.211] executing command
 ** [out :: 198.58.110.211] Sidekiq 5.0.5
 ** [out :: 198.58.110.211]
    command finished in 1424ms
  * executing "cd /home/deploy/applications/xxx/current && bundle exec sidekiq --environment production --daemon --config config/sidekiq.yml && echo OK"
    servers: ["198.58.110.211"]
    [198.58.110.211] executing command
 ** [out :: 198.58.110.211] OK
    command finished in 1128ms

我可以确认我正在获取环境(rbenv& bundler正确),因为第一次运行cmd显示。但意外的是sidekiq任务开始并分散到遗忘:1)tmp / pids / sidekiq.pid被初始化,但进程不存在,2)logs / sidekiq.log被创建,但只有标题:

# Logfile created on 2018-01-05 11:34:09 -0300 by logger.rb/56438
  • 如果我删除 - 守护程序开关,我会完全运行该进程,但当然capistrano部署任务永远不会结束,当我执行CTRL + C sidekiq关闭时。

  • 如果我只是ssh到遥控器并执行命令(显然替换current_path)它完美无缺。

  • 我已经尝试了几乎我能想象到的一切:不使用config.file,使用RAILS_ENV代替--environment等。

  • 正如“&& echo OK”所示,该命令未返回错误。

  • Capistrano正在使用“/ bin / bash --login -c'cd / home / deploy / applications / microgestion / current&& bundle exec sidekiq - environment production --daemon --config config / sidekiq.yml'“据我所知,可以运行命令。

  • Ruby v2.3.3,Capistrano 2.15.5,Sidekiq 5.0.5,Rails 4.0.12

2 个答案:

答案 0 :(得分:1)

通过添加&&&最后睡觉1 ,如下所述:http://blog.hartshorne.net/2013/03/capistrano-nohup-and-sleep.html

  desc "Start sidekiq"
  task :start do
    run "cd #{current_path} && bundle exec sidekiq --environment production --daemon --config config/sidekiq.yml && sleep 1"
  end

感谢@ user3309314指出我正确的方向。

答案 1 :(得分:0)

如果您使用普通的Capistrano来守护Sidekiq,任何崩溃都会导致停机。不要这样做。您需要使用一个进程监视器,如果它死了将重启Sidekiq进程。使用systemd,upstart和/或Foreman,如文档中所述。

https://github.com/mperham/sidekiq/wiki/Deployment#running-your-own-process