(使用collectiveideaのdelayed_job)ジョブのクラス内でdelayed_jobをどのように削除しますか?
私はそれがエンキューされたので、キーワードが以来削除された場合、私は仕事自体を破壊したいキーワードの擦り傷が、仕事を持っている(つまり、ユーザーが自分のキーワードのいずれかを削除します) 。
私のような何かにキーワード検索を移動することにより、フックの前にDJの中にそれを置くしようとしていた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
ジョブが失敗しました私が指定したキャップ。ここで
は失敗です:
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だけで全体の再試行システムをバイパスして、できるだけ早くそれはキーワードが存在しないことを認識し、ジョブを破棄します。ただ、それは静かに例外なく失敗し、ジョブが消えてしまいます持って
class ScrapingJob < Struct.new(:keyword_id)
def perform
keyword = Keyword.find_by_id(keyword_id)
unless keyword.nil?
data = keyword.scrape
keyword.details.create!(:text => data[:text])
end
end
end
今日、私は 'find_by_id'が例外を発生させないことを学びました!私は余分な説明のためにあなたの投票に最善の答えをします。あなたはdelayed_job Stackoverflowの質問をあなたの携帯電話にまっすぐにプッシュしますか? – danneu
いいえ、私はちょうど集合アイデアのためのツイッター検索を行っていたとそれを見つけた! –