2013-02-26 21 views
3

运行god.rb启动并监视Sidekiq,这不起作用。在我的上帝配置为sidekiq。sidekiq真正的god.rb永远不会跑我的工人,从终端相同的命令呢?

从生产终端手动运行sidekiq -C /srv/books/current/config/sidekiq.yml确实工作正常,但不是sidekiq god.rb配置任何人的想法为什么会发生这种情况?没有太多的日志。

God.watch do |w| 

    w.name = "sidekiq" 
    w.interval = 30.seconds 
    w.start = "cd #{ENV['RAILS_ROOT']}; sidekiq -C /srv/books/current/config/sidekiq.yml" 
    w.stop = "cd #{ENV['RAILS_ROOT']}; exec sidekiqctl stop /srv/books/shared/tmp/pids/sidekiq.pid" 
    w.restart = "#{w.stop} && #{w.start}" 
    w.start_grace = 10.seconds 
    w.restart_grace = 10.seconds 
    w.log = File.join(ENV['RAILS_ROOT'], 'log', 'sidekiq.log') 

    # 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 


    # Notifications 
    # -------------------------------------- 
    w.transition(:up, :start) do |on| 
    on.condition(:process_exits) do |p| 
     p.notify = 'ect' 
    end 
    end 


end 
+1

是RAILS_ENV/RAILS_ROOT集? – 2013-07-27 13:36:02

回答

1

您好像缺少RAILS_ROOT的定义。你在脚本中使用它,但它从来没有定义。它可能在终端工作,因为它在那里。但是,当god.rb运行它时,您不会获得终端环境,而是一个新的清洁环境。

尝试添加以下内容到神脚本:

w.env = { 'RAILS_ROOT' => "/srv/books/current", 
      'RAILS_ENV' => "production" } 

你也可以把它作为一个正常的红宝石可变如图the example

+0

还没有测试过这个,我很快就从堆栈中暂时缺席了。如果它有效,我会给予正确的答案。我有在god.rb ENV ['RAILS_ROOT'] =“/ srv/books/current”god.rb在/ god子目录中包含了我的其他.god配置文件(其中/config/god.rb是主要配置文件)注意确定这是否会产生相同的结果 – Rubytastic 2013-09-02 21:49:32