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将取消回调链。