Resque начинает работу, но ничего не делает - PullRequest
1 голос
/ 19 сентября 2011

Я использую 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

Ответы [ 4 ]

1 голос
/ 19 сентября 2011

Вы должны запустить своего работника так:

nohup QUEUE=* rake resque:work & &> log/resque_worker_QUEUE.log

Это выведет все, что вы отлаживаете, в "log / resque_worker_QUEUE.log", и вы сможете узнать, что не так с вашим классом Campaign.

1 голос
/ 19 сентября 2011

Эти задания почти наверняка не работают из-за исключения. Что Resque-Web показывает вам на вкладке Failures? Вы также можете получить это из консоли Rails с помощью:

Resque.info

или

Resque::Failure.all(0)
0 голосов
/ 01 ноября 2017

Это очень старый вопрос, поэтому я не уверен, как тогда была структура папок rails, но у меня была та же проблема, и проблема была с наследованием. Кажется, если вы используете Resque, ваши классы заданий не должны наследоваться от ApplicationJob.

так что если ваш код был таким в (app / jobs / campaign_job.rb):

class Campaign < ApplicationJob
  @queue = :a_job_queue
  def self.perform
     #some background job
  end
end

затем удалите наследство, т.е. "

0 голосов
/ 19 ноября 2013

Попробуйте это:

env TERM_CHILD=1 COUNT=2 "QUEUE=*" bundle exec rake resque:workers
...