我一直在寻找如何使用神监控系统启动sidekiq的配置。下面是我用来启动sidekiq的神文件。
rails_env = ENV['RAILS_ENV'] || "production"
rails_root = ENV['RAILS_ROOT'] || "/home/ubuntu/Projects/app"
God.watch do |w|
w.dir = "#{rails_root}"
w.name = "sidekiq"
w.interval = 30.seconds
w.env = {"RAILS_ENV" => rails_env}
w.interval = 30.seconds
w.start = "/home/ubuntu/.rvm/gems/ruby-1.9.3-p0/bin/ruby -f #{rails_root}/ sidekiq -c 25 -q worker,15 -q distributor,5"
w.uid = 'ubuntu'
# determine the state on startup
w.transition(:init, { true => :up, false => :start }) do |on|
on.condition(:process_running) do |c|
c.running = true
end
end
# determine when process has finished starting
w.transition([:start, :restart], :up) do |on|
on.condition(:process_running) do |c|
c.running = true
c.interval = 5.seconds
end
# failsafe
on.condition(:tries) do |c|
c.times = 5
c.transition = :start
c.interval = 5.seconds
end
end
# start if process is not running
w.transition(:up, :start) do |on|
on.condition(:process_running) do |c|
c.running = false
end
end
end
当我使用god
命令运行此脚本时,上帝服务器“显示进程未运行”,好像什么也没发生。我相信我没有正确使用w.start
来调用sidekiq,
我在开发模式下使用bundle exec sidekiq -c 25 -q worker,15 -q distributor,5
并且工作正常。
我错过了什么?如何部署sidekiq工作者有不同的方式吗?
答案 0 :(得分:1)
解决“流程未运行”问题的关键是要正确定义dir
属性:
w.dir = "#{Rails.root}"
解决了这个问题。
答案 1 :(得分:0)
我遇到了类似的问题。 在sidekiq.yml下指定队列和并发设置为我解决了这个问题。在你的上帝开始,
sidekiq -e #{env} -C #{root}/config/sidekiq.yml
Sidekiq Github有一个yml配置示例。它类似于:
---
:concurrency: 25
:queues:
- [a, 5]
- [b, 3]
- [c, 2]
- [default, 3]
我希望你已经找到了解决办法。
答案 2 :(得分:-1)
我刚刚使用你的代码来部署我自己的god / sidekiq设置,这个改变使它适合我。我将您的w.start
替换为:
w.start = "bundle exec sidekiq -q release,1 -q artist,2 -q artists,3 -c 20"
(当然,这些队列只是我碰巧使用的队列,并且不相关)