未初始化的常数延迟::作业

Ger*_*Ger 18 ruby-on-rails delayed-job ruby-on-rails-3

我已将delayed_job gem添加到我的gemfile并正确安装但是当我尝试运行以下行时:

Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc
Run Code Online (Sandbox Code Playgroud)

我收到错误'uninitialized constant Delayed :: Job'

有人可以解释我在这里需要做什么吗?我已经尝试过预先运行'rake jobs:work',但它也会返回'未初始化的常量Delayed :: Job'错误.另外,我已经在文件(application.rb)中添加了"require'delayd_job'"而没有太多运气.

Zub*_*bin 18

如果您已升级到delayed_job版本> = 3,则需要添加此项(假设您使用的是ActiveRecord):

# Gemfile
gem 'delayed_job_active_record'
Run Code Online (Sandbox Code Playgroud)

  • 请参阅此处的"在Active Record上从2.x升级到3.0.0":https://github.com/collectiveidea/delayed_job (2认同)

iwa*_*bed 14

您是否按照README文件中的安装说明进行操作? https://github.com/collectiveidea/delayed_job

将其添加到您的gemfile:

gem 'delayed_job_active_record'
Run Code Online (Sandbox Code Playgroud)

然后在控制台上运行它:

$ rails generate delayed_job:active_record
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)

您需要在数据库中创建延迟作业表(假设您使用的是活动记录).

对于Rails 3,您需要做的就是将它包含在gemfile中,运行上面的代码来创建表并迁移数据库,然后重新启动服务器然后去!

  • @sorens我使用`delayed_job`而没有定义`DelayedJob`模型 - 我认为这不是必要的步骤 - 我建议反对它以避免混淆 (5认同)

Reg*_*ieB 10

我在引擎中使用延迟作业(所以gem在.gemspec而不是Gemfile中指定)并且得到了相同的错误.我发现我可以使用以下方法解决问题:

require 'delayed_job_active_record'  # fixes problem
Run Code Online (Sandbox Code Playgroud)

而不是

require 'delayed_job'                # doesn't
Run Code Online (Sandbox Code Playgroud)

  • 不,没有.关键是在引擎中我必须专门使用require语句.其他答案指的是标准的rails应用程序,在Gemfile中使用"gem'delayly_job_active_record'"就足够了.对于在gemspec中定义gem的引擎,情况并非如此,然后您需要使用require语句,其中代码中需要gem. (3认同)