【问题标题】:rails 3.0.9 resque-scheduler and delayed job error undefined method enqueue_atrails 3.0.9 resque-scheduler 和延迟作业错误未定义方法 enqueue_at
【发布时间】:2012-01-26 13:49:41
【问题描述】:

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 文件:

# 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

任何解决此问题的线索或提示将不胜感激。

【问题讨论】:

    标签: ruby-on-rails-3 scheduled-tasks resque


    【解决方案1】:

    这里有几个问题。文档并不总是显而易见的,并假设您应该知道......我没有。因此,在到处挖掘之后,我变得又漂亮又光滑;-) 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 的配置文件为参数启动。这个不能直接从 rails 引用任何东西,因为 resque-web 是一个 sinatra 应用程序,它不能正确加载它。

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

    【讨论】:

      【解决方案2】:

      确实需要同时启动工作进程和调度程序进程。

      我还发现我需要打电话

      需要“resque_scheduler”

      在我调用 Resque.enqueue_at(...) 之前。在我的案例中,这正是“未定义方法”错误的原因。


      resque-web 实际上可以连接到您的 rails 应用程序。在“config/routes.rb”中添加以下行,重启rails app,然后你就可以通过$YOUR_RAILS_ROOT_URL/resque访问resque-web了。

      需要“resque_scheduler” 挂载 Resque::Server, :at => "/resque"

      【讨论】:

        猜你喜欢
        • 2011-12-02
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 2016-08-18
        相关资源
        最近更新 更多