Rails 4.1使用ActiveJob gem时出现未初始化的常量ActiveJob错误

3

我遵循了EngineYard的getting started with active job文章。文章中指出:

如果你想使用默认情况下的Active Job(在较旧版本的Rails中,你可以将其作为gem进行引用),则需要Rails 4.2.0beta1或更高版本。

我正在尝试在我的Rails 4.1项目中使用ActiveJob。 我在Gemfile中添加了ActiveJob gem 'activejob'。根据该文章,我已经:

#config/initializers/active_job.rb
ActiveJob::Base.queue_adapter = :resque

然而,当我运行rails server时,我会收到以下错误提示:

config/initializers/active_job.rb:1:in': uninitialized constant ActiveJob (NameError)`

编辑 - 修复了拼写错误“gem active job”

更新1

根据solydest的建议,在application.rb中添加require 'active_job'可以避免出现未初始化常量ActiveJob的错误,但是,当我尝试调用我的作业时,我却收到了undefined method perform_later'的错误。 我正在遵循Edge Rails指南,使用类似于如下代码的方式来将我的作业加入队列:

MyJob.perform_later(record)

我的工作类型开始:

class MyJob < ActiveJob::Base
  queue_as :images
  def perform(id)

你的 gem 名称不能有空格。它是 gem 'activejob' - Archonic
抱歉,我在问题中写错了,请忽略它。实际上,在我的Gemfile中,您列出的拼写是正确的。我已经更新了问题。 - Marklar
好的,请问 bundle show activejob 的输出是什么? - Archonic
/Users/marklar/.rvm/gems/ruby-2.1.2@rails4.1_app/gems/activejob-0 - Marklar
3个回答

10

我在config/application.rb文件中添加了require 'active_job',放在其他require指令之下,这样问题就解决了。


谢谢您的帮助。如果我添加require 'active_job',那么我就不再会得到uninitialized constant错误,而是会收到undefined method perform_later'`错误。我会更新问题以反映这一点。 - Marklar

2
我发现Rails 4.1中的ActiveJob宝石版本为0,与Rails 4.2中的版本不同。
如果您正在使用ActiveJob的v0版本,则语法应该是:
MyJob.enqueue(record)

或者

MyJob.enqueue(record, options)

你会在这篇文章中发现许多关于Rails 4.1中ActiveJob的有趣信息: http://kinopyo.com/blog/use-activejob-in-rails-4-1/

1
很棒的文章。我认为值得一提的是,该文章使用了 require 'active_job',类似于 solydest 的回答。我之所以提到这一点,是为了防止文章链接失效。 - Marklar

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接