У меня есть рабочий 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
Но потом, когда воркер повторяет попытку чуть позже — всегда получается.
Мне действительно кажется, что что-то не инициализируется, когда должно... но я не могу это отследить.