我有一个流程,通常需要几秒钟才能完成,因此我正在尝试使用delayed_job来异步处理它。作业本身运行良好,我的问题是如何轮询作业以查找它是否完成。
我可以通过将其分配给变量来从delayed_job获取id:
job = Available.delay.dosomething(:var => 1234)
+------+----------+----------+------------+------------+-------------+-----------+-----------+-----------+------------+-------------+
| id | priority | attempts | handler | last_error | run_at | locked_at | failed_at | locked_by | created_at | updated_at |
+------+----------+----------+------------+------------+-------------+-----------+-----------+-----------+------------+-------------+
| 4037 | 0 | 0 | --- !ru... | | 2011-04-... | | | | 2011-04... | 2011-04-... |
+------+----------+----------+------------+------------+-------------+-----------+-----------+-----------+------------+-------------+
但是,一旦它完成了任务,就会删除它,并且搜索已完成的记录会返回错误:
@job=Delayed::Job.find(4037)
ActiveRecord::RecordNotFound: Couldn't find Delayed::Backend::ActiveRecord::Job with ID=4037
@job= Delayed::Job.exists?(params[:id])
我应该去更改这个,或者推迟删除完整记录吗?我不确定如何获取它的状态通知。还是轮询死记录作为完成的证明可以吗?是否有其他人遇到类似的情况?