繁体   English   中英

Rails后台工作者总是第一次失败,第二次工作

[英]Rails background worker always fails first time, works second

我有一个sidekiq worker,在保存对象后将其触发:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM