我有一个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
然而,当工人稍后重试时 - 它总是成功。
真的感觉好像什么东西没有初始化它应该......但我似乎无法追踪它。
答案 0 :(得分:4)
确保process
始终 true
- 这是回调链中的一部分。
所以重写如下:
def process
ProcessWorker.perform_async(id, key) if key.present?
true
end
当执行ActiveRecord
回调链时,任何返回布尔值的方法都会影响链 - false
将取消回调链。