如何在控制台中执行特定的Delayed::Job?

101

由于某些原因,Delayed::Job决定排队但不执行任何操作,即使我已经重新启动了它多次,甚至kill -9并重新启动了它。 它不会运行任何作业。

我能否在/console中指定特定的作业并告诉它开始工作?

例如:Delayed::Job.find(x).run


3个回答

180

你也可以这样做:

Delayed::Worker.new.run( Delayed::Job.find(x) ) 

29
这是最佳答案,它在工作完成后删除了一个任务。谢谢。 - m4risU
13
Delayed::Worker.new.run(Delayed::Job.find(id)) - mrt
我同意@mrt的评论,你应该确保运行正确的作业。 - Jonny
如果我想运行特定队列的多个延迟作业,我该怎么做?请帮忙。 - Zia Qamar
这个功能唯一不做的事情就是标记行为锁定状态。 - phil
显示剩余2条评论

136

回答如何从控制台运行特定的作业:

Delayed::Job.find(x).invoke_job

但您必须记住,它不会运行其他任何事情,例如销毁已完成的作业等,只运行作业/任务。


4
请仔细阅读回答作者的注意事项:“它不会运行其他任何任务,比如破坏已经完成的工作。”我这样说是因为我没有读懂它而变得疯狂。请查看@DavidTuite的回答 - fguillen

0
在Heroku上,我遇到了一个“卡住”的任务,只需要运行heroku restart就可以让工作程序重新开始。

1
感谢您的积极评论;-) 可能是提问者或来到这个问题的人在Heroku上遇到了问题。 - rassom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接