繁体   English   中英

Rails NameError:初始加载时未初始化的常量

[英]Rails NameError: uninitialized constant on initial load

我有一个奇怪的重复错误:每次启动工作程序时,它在第一次尝试时都会失败,然后从那里开始工作。 每次我得到相同的错误。

NameError: uninitialized constant Models::ScorecardVirtualAttributes::LevelCalculator

因此,我进行了通常的检查:首先,我检查了它的拼写是否正确。 然后,我检查了它是否依赖于某种不包含的宝石,事实并非如此。

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

[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位于lib/models/scorecards_virtual_attributes/level_calculator.rb

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM