rails 3.0.9 планировщик заданий и ошибка отложенного задания неопределенный метод enqueue_at - PullRequest
0 голосов
/ 13 августа 2011

Контекст рельсов 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

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

Ответы [ 2 ]

5 голосов
/ 16 августа 2011

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

require 'resque_scheduler' 

Задача восстановления должна быть запущена:

COUNT=5 QUEUE=* rake resque:work

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

rake resque:scheduler

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

resque-web ~/pathToYourApp/config/initializers/resque.rb 
2 голосов
/ 17 ноября 2011

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

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

require 'resque_scheduler'

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


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

  require 'resque_scheduler'
  mount Resque::Server, :at => "/resque"
...