2011-11-17 45 views
2

我有意使用Resque将工作分配到许多不同的计算机。但我有一个担忧。如果我需要杀死从事某项工作的其中一名工人,我希望能够自动重新执行该工作,以确保该工作由另一名工人来运行。我与Django Celery一起工作,只是做CTRL + C杀死工作人员并重新执行任务。有没有办法让Rails中的Resque发生这种情况?谢谢!使用Resque重新排队工作

+0

你肯定Resque不会自动重新排队? Resque假定混乱,所以如果它正常工作,我不会感到惊讶。 –

+0

我试过了。我用两种不同的工作跑了两名工人。我对其中一名工作人员做了CTRL-C,当我检查Resque-web时,它看起来好像它已经成功处理了这个工作,而我没有终止的工作人员没有拿起额外的工作。 = /如果我可以捕获该CTRL-C并优雅地让工作人员退出并重新执行作业。 – Silverbolt

回答

3

我只是想通了。我可以捕获信号项(CTRL-C)并强制它重新执行作业或告诉作业失败并在稍后重新尝试重新执行作业。

例如:

def self.perform(args) 
    trap("INT") do 
    puts "Signal was caught!" 
    #either raise an error here if using a tool like resque-retry or requeue the job 
    end 
    #Do work here 
end 

对不起,愚蠢的问题;)

+0

不是一个愚蠢的问题! :) – gef