【问题标题】:Rails NameError: uninitialized constant on initial loadRails NameError:初始加载时未初始化的常量
【发布时间】:2014-09-16 13:53:18
【问题描述】:

我有一个奇怪的反复出现的错误:每次启动 worker 时,它在第一次尝试时失败,然后会从那里开始工作。每次我得到同样的错误。

NameError: uninitialized constant Models::ScorecardVirtualAttributes::LevelCalculator

所以我进行了常规检查:首先我检查它是否拼写正确。然后我检查它是否依赖于某种未包含在内的 gem,但事实并非如此。

我想我已经在控制台中复制了失败。在控制台的初始启动时,我运行以下命令:

[1] toolkit »  defined? Models::ScorecardVirtualAttributes::LevelCalculator
  => nil
[2] toolkit »  defined? ::Models::ScorecardVirtualAttributes::LevelCalculator
  => nil
[3] toolkit »  Models::ScorecardVirtualAttributes::LevelCalculator
  => Models::ScorecardVirtualAttributes::LevelCalculator < Object
[4] toolkit »  defined? ::Models::ScorecardVirtualAttributes::LevelCalculator
  => "constant"

如您所见,当我检查它是否已定义时,它最初会失败。但是在直接调用它之后,当我检查它是否已定义时,它会返回预期的“常量”。

然后我想也许它没有正确加载。这是我在config/application.rb 中的内容:

# Within config/application.rb
...
config.autoload_paths += %W( #{Rails.root}/lib) #/models

我已将lib/models 目录添加到autoload_paths,而最初似乎没有加载的模型位于lib/models/scorecards_virtual_attributes/level_calculator.rb

是否还有其他可能导致这种情况的原因?还是我做的有问题?

【问题讨论】:

    标签: ruby-on-rails nameerror


    【解决方案1】:

    Rails 3 不会自动加载 lib 目录下的文件。如果您使用的是 Rails 3 或更高版本,则必须将其加载到 config/application.rb 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-15
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多