rails 3.0.9 resque-scheduler и отложенная ошибка задания неопределенный метод enqueue_at

Контекст рельсов 3.0.9 с использованием resque 1.17.1 и resque-scheduler 2.0.0.0d. Попытка следовать документу по адресу https://github.com/bvandenbos/resque-scheduler/tree/v2.0.0.d, я создал файл resque_scheduler.rake:

# Resque tasks
require 'resque/tasks'
require 'resque_scheduler/tasks'    

namespace :resque do
  task :setup do
    require 'resque'
    require 'resque_scheduler'
    require 'resque/scheduler'      

    # you probably already have this somewhere
    Resque.redis = 'localhost:6379'

    # The schedule doesn't need to be stored in a YAML, it just needs to
    # be a hash.  YAML is usually the easiest.
    #Resque.schedule = YAML.load_file('your_resque_schedule.yml')

    # If your schedule already has +queue+ set for each job, you don't
    # need to require your jobs.  This can be an advantage since it's
    # less code that resque-scheduler needs to know about. But in a small
    # project, it's usually easier to just include you job classes here.
    # So, someting like this:
    #require 'jobs'

    # If you want to be able to dynamically change the schedule,
    # uncomment this line.  A dynamic schedule can be updated via the
    # Resque::Scheduler.set_schedule (and remove_schedule) methods.
    # When dynamic is set to true, the scheduler process looks for 
    # schedule changes and applies them on the fly.
    # Note: This feature is only available in >=2.0.0.
    Resque::Scheduler.dynamic = true
  end
end

На данный момент меня интересует только отложенная работа, поэтому у меня нет файла resque_schedule.yml. Я проверил свой рабочий класс с помощью resque, и он работает нормально. Когда я пытаюсь добавить задержку и пользователя enqueue_at в свой контроллер...

def do_delay_job user_id,delay
    Resque.enqueue_at(delay.minutes.from_now, JobDelayer, :user_id => user_id)
    #Resque.enqueue(JobDelayer, user_id) # using basic resque mechanism.
end 

... просто не получается

undefined method `enqueue_at' for Resque Client connected to redis://127.0.0.1:6379/0:Module

Любая подсказка или подсказка, чтобы выяснить эту проблему, будут оценены.


person Alpha    schedule 13.08.2011    source источник


Ответы (2)


Тут пару вопросов. документация не всегда очевидна и предполагает, что вы должны знать... Я не знал. Итак, после того, как я копался повсюду, я получил resque красиво и гладко ;-) Initializers\resque.rb должен ссылаться на resque_schedule.

require 'resque_scheduler' 

задача resque должна быть запущена:

COUNT=5 QUEUE=* rake resque:work

задача resque-schedule должна быть запущена:

rake resque:scheduler

Чтобы отслеживать resque-schedule, resque-web должен быть запущен с конфигурационным файлом resque в качестве параметра. Это не должно напрямую ссылаться на что-либо из рельсов, поскольку resque-web является приложением sinatra, и оно не сможет загрузить его должным образом.

resque-web ~/pathToYourApp/config/initializers/resque.rb 
person Alpha    schedule 15.08.2011

Запуск как рабочего, так и планировщика процессов действительно был необходим.

Кроме того, я узнал, что мне нужно было позвонить

require 'resque_scheduler'

до того, как я позвонил Resque.enqueue_at(...). Это было самой причиной ошибки «неопределенный метод» в моем случае.


И resque-web может быть подключен к вашему приложению rails. Добавьте следующие строки в «config/routes.rb», перезагрузите приложение rails, после чего вы сможете получить доступ к resque-web через $YOUR_RAILS_ROOT_URL/resque.

  require 'resque_scheduler'
  mount Resque::Server, :at => "/resque"
person barley    schedule 16.11.2011