Я использую resque для выполнения некоторой (долгой) работы. И у меня есть несколько классов с тем же смешанным модулем для очередей. Class Service заменяет в тестах, поэтому он автономен и (может быть, слишком сложен). Так что история, когда я звоню
Campaign.perform(user_id)
напрямую, все отлично работает, но когда я пытаюсь использовать очередь:
Resque.enqueue(Campaign, user_id)
Работа создана, но, похоже, ничего не делать. По крайней мере, в базу данных ничего не сохраняется. Что является главной задачей класса Campaign. В интерфейсе resque-web-интерфейса я вижу, что задания создаются, завершаются и завершаются (быстро, почти сразу после создания), но безрезультатно.
Я новичок в Resque и не совсем уверен, что он все это называет (запутался, как его отладить).
У кого-нибудь есть подобные проблемы? спасибо за любую помощь.
Модуль:
module Synchronisable
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def perform(user_id)
save_objects("#{self.name}::Service".constantize.get_objects(user_id))
end
protected
def save_objects(objects)
raise ArgumentError "should be implemented"
end
end
class Service
def self.get_objects(user)
raise ArgumentError "should be implemented"
end
end
end
Один из классов:
class Campaign < ActiveRecord::Base
include Synchronisable
@queue = :app
class << self
protected
def save_objects(objects)
#some stuff to save objects
end
end
class Service
def self.get_objects(user_id)
#some stuff to get objects
end
end
end