【发布时间】:2011-01-20 07:32:07
【问题描述】:
(使用collectiveidea的delayed_job)
我有一个搜索关键字的作业,但如果关键字在入队后被删除(即用户删除了他的一个关键字),我希望该作业自行销毁。
class ScrapingJob < Struct.new(:keyword_id)
def perform
keyword = Keyword.find(keyword_id)
data = keyword.scrape
keyword.details.create!(:text => data[:text])
end
end
我试图通过将关键字查找移动到以下内容来将其放入 DJ 的前钩子中:
def before(job)
# If keyword doesn't exist, destroy job
begin
@keyword = Keyword.find(keyword_id)
rescue 'RecordNotFound'
self.destroy
end
end
作业失败,因此 DJ 不断重新尝试此作业,直到达到我指定的重试上限。
这是失败的原因:
Keyword Load (0.4ms) SELECT "keywords".* FROM "keywords"
WHERE ("keywords"."id" = 292929) LIMIT 1
AREL (1.1ms) UPDATE "delayed_jobs"
SET "last_error" = '{Couldn''t find Keyword with ID=292929
...
...
我希望 DJ 在看到关键字不存在时立即销毁作业,绕过整个重试系统。
【问题讨论】: