2011-08-13 57 views
0

rails 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文件:rails 3.0.9 resque-scheduler和延遲作業錯誤undefined方法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測試了我的工人類,它工作正常。當我嘗試添加的延遲和用戶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 

任何線索或暗示弄清楚這個問題,將不勝感激。

回答

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

確實需要啓動worker和scheduler進程。

我除了發現是,我需要調用

 
require 'resque_scheduler' 

之前我叫Resque.enqueue_at(...)。這是我的情況下「未定義方法」錯誤的原因。


而且resque-網實際上可以掛接到您的Rails應用程序。在「config/routes.rb」中添加以下行,重新啓動rails應用程序,然後您可以通過$ YOUR_RAILS_ROOT_URL/resque訪問resque-web。

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