【问题标题】:ActiveJob uninitialized constantActiveJob 未初始化常量
【发布时间】:2016-01-07 12:39:43
【问题描述】:

ActiveJob 有一个奇怪的问题。

我正在从控制器执行以下语句:

ExportJob.set(wait: 5.seconds).perform([A series of parameters, basically strings and integers])

ExportJob.rb

require_relative 'blablabla/resource_manager'

class ExportJob < ActiveJob::Base
   def perform
       ResourceManager.export_process([A series of parameters, basically strings and integers])
   end
end

第一次执行控制器/动作时流程正常,但第二次抛出错误:

uninitialized constant ExportJob::ResourceManager

奇怪的是,这不是我项目中唯一的工作,其他工作都在执行中没有任何问题。

我正在附加我的项目的一些信息:

开发/生产.rb

config.active_job.queue_adapter = :delayed_job

宝石文件:

gem 'delayed_job'

gem 'delayed_job_active_record'

任何线索都会对我有所帮助。

提前致谢!

【问题讨论】:

  • 试试::ResourceManager.export_process( ... )
  • 使用::ResourceManager
  • 或使用 require_dependency 而不是 require_relative
  • 嗨,我要试试。谢谢!
  • @dsounded 我也要去试试

标签: ruby-on-rails ruby rails-activejob


【解决方案1】:

常量在 Ruby 中没有全局作用域。常量可以在任何范围内可见,但您必须指定要找到常量的位置。

没有::,Ruby 在当前执行代码的词法范围内查找ResourceManager 常量(即ExportJob 类,因此它查找ExportJob::ResourceManager)。

以下应该可以工作(假设ResourceManager 被定义为顶级常量(例如不嵌套在任何模块/类下):

class ExportJob < ActiveJob::Base
  def perform
    ::ResourceManager.export_process(*args)
  end
end

【讨论】:

  • ResourceManager 不是一个常量,而是一个类。不管怎样,我会试试你的建议。
  • @EleazarEnrique 类的名称是一个常量:)
  • @EleazarEnrique 没有问题,如果这对你有用,请告诉我
  • 在开发环境中不起作用,但在生产环境中它像魅力一样工作。我不明白!
  • 我认为重新启动服务器/重新加载控制台就可以了。毕竟生产才是最重要的(开玩笑)。如果/何时开始在开发模式下工作(并且应该),不要忘记考虑接受答案
猜你喜欢
  • 2014-12-22
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多