Ruby on rails 3 rails 3.0.9重新设置调度程序和延迟作业错误未定义方法enqueue_at

Ruby on rails 3 rails 3.0.9重新设置调度程序和延迟作业错误未定义方法enqueue_at,ruby-on-rails-3,scheduled-tasks,resque,Ruby On Rails 3,Scheduled Tasks,Resque,rails 3.0.9的上下文,使用resque 1.17.1和resque scheduler 2.0.0.0d。 尝试按照处的文档进行操作,我创建了一个resque_scheduler.rake文件: # Resque tasks require 'resque/tasks' require 'resque_scheduler/tasks' namespace :resque do task :setup do require 'resque' require

rails 3.0.9的上下文,使用resque 1.17.1和resque scheduler 2.0.0.0d。 尝试按照处的文档进行操作,我创建了一个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测试了我的工人阶级,它工作得很好。当我尝试在控制器中添加延迟和用户排队时

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

任何关于这个问题的线索或提示都将不胜感激。

这里有几个问题。文档并不总是显而易见的,并且假设您应该知道……我没有。所以,在挖掘了整个地方后,我得到了一个又好又平滑的结果;-) 初始化者\resque.rb必须引用resque\u计划

require 'resque_scheduler' 
必须启动resque任务:

COUNT=5 QUEUE=* rake resque:work
rake resque:scheduler
必须启动重新确认计划任务:

COUNT=5 QUEUE=* rake resque:work
rake resque:scheduler
要监视resque计划,必须以resque的配置文件作为参数启动resque web。这一个不能直接引用rails中的任何内容,因为resque web是sinatra应用程序,无法正确加载

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

启动工作进程和调度进程确实是必要的

我还发现我需要打电话

require 'resque_scheduler' 需要“重新设置调度程序” 在我调用Resque.enqueue_之前,(…)。在我的案例中,这正是“未定义方法”错误的原因


而resque web实际上可以连接到您的rails应用程序。在“config/routes.rb”中添加以下行,重新启动rails应用程序,然后您可以通过$YOUR\u rails\u ROOT\u URL/resque访问resque web

require 'resque_scheduler' mount Resque::Server, :at => "/resque" 需要“重新设置调度程序” mount Resque::Server,:at=>“/Resque”