Rails后台工作者总是第一次失败,第二次工作
我有一个sidekiq工作者在保存对象后触发:
class Post < ActiveRecord::Base attr_accessible :description, :name, :key after_save :process def process ProcessWorker.perform_async(id, key) if key.present? end def secure_url key.match(/(.*\/)+(.*$)/)[1] end def nonsecure_url key.gsub('https', 'http') end end
工人看起来如下(它尚未完成……只是测试):
class ProcessWorker include Sidekiq::Worker def perform(id, key) post = Post.find(id) puts post.nonsecure_url end end
奇怪的是,每次工作人员触发时,它最初会因以下错误而失败:
undefined method `gsub' for nil:NilClass
但是,当工人稍后重试时 – 它总是成功。
它真的感觉好像什么东西没有初始化它应该……但我似乎无法追踪它。
确保process
始终为 true
– 这是回调链中的一部分。
所以重写它像这样:
def process ProcessWorker.perform_async(id, key) if key.present? true end
当正在执行ActiveRecord
回调链时,任何返回布尔值的方法都会影响链 – false
将取消回调链。