Ruby on rails 未初始化的常量延迟::作业

Ruby on rails 未初始化的常量延迟::作业,ruby-on-rails,ruby-on-rails-3,delayed-job,Ruby On Rails,Ruby On Rails 3,Delayed Job,我已将延迟的_作业gem添加到我的gem文件并正确安装,但当我尝试运行以下行时: Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 我得到错误“未初始化常量延迟::作业” 有人能解释一下我需要做什么吗?我已经尝试过预先运行“rake jobs:work”,但它也会返回“uninitialized constant Delayed::Job”错误。此外,我在文件(application.rb)中添加了“require'delay

我已将延迟的_作业gem添加到我的gem文件并正确安装,但当我尝试运行以下行时:

Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc
我得到错误“未初始化常量延迟::作业”


有人能解释一下我需要做什么吗?我已经尝试过预先运行“rake jobs:work”,但它也会返回“uninitialized constant Delayed::Job”错误。此外,我在文件(application.rb)中添加了“require'delayed_job'”,但运气不好。

您是否遵循自述文件中的安装说明

将此添加到您的文件:

gem 'delayed_job_active_record'
然后在控制台上运行此命令:

$ rails generate delayed_job:active_record
$ rake db:migrate
您需要在数据库中创建延迟作业表(假设您使用的是活动记录)


对于Rails3,您所需要做的就是将其包含在GEM文件中,运行上面的代码来创建表并迁移数据库,然后重新启动服务器并继续

不久前我也遇到了同样的问题。我在跟踪ryan bates关于delayed_作业的屏幕广播时,遇到了相同的错误“uninitialized constant delayed::job”。在屏幕广播中,ryan创建了一个名为mailing_job.rb的文件(位于lib文件夹下),其中包含delayed_job perform方法,允许您使用排队方法。在做了一些研究之后,我发现rails 3不会自动将lib文件夹文件加载到你的应用程序中。(不完全确定)

试试这个
在您使用此命令的控制器中:

"Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc" 
尝试像这样要求文件。

要求“邮寄作业”
类AssetController<应用程序控制器
定义某些方法
延迟::Job.enqueue do_it(),0,1.minutes.from_now.getutc
结束
结束

以防万一,如果仍然没有回答,请查看下面的链接


编辑:或者,只需升级到最新版本-2.1

如果您已升级到延迟作业版本>=3,则需要添加以下内容(假定您使用的是ActiveRecord):


版本更改可能性:如果您通过非锁定的捆绑包从2.1.x版本跳转到3.x版本的gem,您可能会遇到类似的问题。

我在引擎中使用延迟作业(因此gem是在.gempec而不是Gemfile中指定的),并收到相同的错误。我发现我可以通过以下方法解决问题:

require 'delayed_job_active_record'  # fixes problem
而不是

require 'delayed_job'                # doesn't

非常有帮助-我有这个问题。除了完成之外,为了避免其他人点击它,我还必须将我的回形针用法从
gem'aws-s3'
更新为
gem'aws sdk'
参见“在活动记录上从2.x升级到3.0.0”:这解决了我在Heroku上移动到雪松堆的问题,以及Peter对aws的评论。谢谢这解决了我的问题,但是链接有一行代码,你可以很容易地将它粘贴到这里。Delayed::Worker.backend=:active_record还请确保添加
app/models/Delayed_job.rb
。不需要太多定义,只需要类本身:
class DelayedJob
应该这样做。@sorens你能确认这是一个必要的步骤吗?@just_umatt我相信是的,但我还没有确认。启动一个新的rails项目,添加延迟作业gem,跳过模型并查看。@sorens我正在使用
delayed\u job
,但没有定义
DelayedJob
模型-我认为这不是一个必要的步骤-我建议不要这样做以避免混淆它听起来像是一个可选步骤。我编写
CustomJobs
来封装我所有的
delayed\u job
功能。也许这就是为什么需要它。对于未来的开发人员,在不创建模型的情况下尝试它,如果它起作用,您就可以参加竞赛了!没有。关键的一点是,在引擎中,我必须特别使用require语句。其他答案涉及标准rails应用程序,在Gemfile中使用“gem‘delayed_job_active_record’”就足够了。对于在gempec中定义gem的引擎,情况并非如此,然后您需要在代码中需要gem的地方使用require语句。是的,这个require语句可以做到这一点!谢谢你。谢谢你的回答,这在Rails引擎中对我有效。万一有人像我一样想知道,require会出现在engine.rb文件的顶部。
require 'delayed_job_active_record'  # fixes problem
require 'delayed_job'                # doesn't