2011-08-13 4 views
0

resque 1.17.1 및 resque-scheduler 2.0.0.0d를 사용하여 레일 3.0.9의 컨텍스트입니다. https://github.com/bvandenbos/resque-scheduler/tree/v2.0.0.d에서 문서를 따라하려고 , 나는 resque_scheduler.rake 파일을 만들었습니다rails 3.0.9 resque-scheduler 및 지연된 작업 오류가 정의되지 않은 메소드 enqueue_at

# 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로 작업자 클래스를 테스트했으며 정상적으로 작동합니다. 내가 ... 내 컨트롤러에

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 

을 지연 및 사용자 enqueue_at을 추가하려고하면 ... 그냥이 문제가 이해 될 것이다 알아 내기 위해

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

어떤 단서 나 힌트를 실패합니다.

답변

5

여기 몇 가지 문제가 있습니다. 문서화가 항상 명백하지 않고 당신이 알고 있어야한다고 가정 ... 나는하지 않았다. 그래서 모든 곳을 파고 난 후 나는 부드럽고 매끄럽게 작업 할 수 있습니다 ;-) 초기화 프로그램 \ resque.rb는 resque_schedule을 참조해야합니다.

require 'resque_scheduler' 

resque 작업을 시작해야합니다 :

COUNT=5 QUEUE=* rake resque:work 

resque - 예약 작업을 시작해야합니다

rake resque:scheduler 

resque 스케줄을 모니터링하려면, resque - 웹은 설정으로 시작해야합니다 파라미터로서 resque의 파일. 이것은 resque-web이 sinatra 앱이므로 레일에서 직접 아무것도 참조하지 않아야하며 올바르게로드 할 수 없습니다.

resque-web ~/pathToYourApp/config/initializers/resque.rb 
2

실제로 작업자와 스케줄러 프로세스를 시작하는 것이 실제로 필요했습니다. 내가 추가로 발견 무엇

내가 Resque.enqueue_at (...)를 호출하기 전에 내가

 
require 'resque_scheduler' 

를 호출 할 필요가 있다고했다. 이것은 내 경우에 "정의되지 않은 메소드"오류의 가장 큰 원인이었습니다.


그리고 resque - 웹은 실제로 레일 응용 프로그램에 중독 될 수있다. "config/routes.rb"에 다음 행을 추가하고 rails 앱을 재부팅하면 $ YOUR_RAILS_ROOT_URL/resque를 통해 resque-web에 액세스 할 수 있습니다.

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