繁体   English   中英

`const_missing':未初始化的常量(NameError)

[英]`const_missing': uninitialized constant (NameError)

每次我尝试使用“script/runner -e production ClassName.run”从我的 rails 2.2 应用程序的 lib 目录中运行任何 class 时,都会出现以下错误:

/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/commands/runner.rb:47:  
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:89:in `const_missing': uninitialized constant ClassName (NameError)"

出于某种原因,当我将其作为test而不是production运行时,我没有收到此错误,并且一切正常。

哦,是的run是一种 class 方法,即def self.run.... end

有什么建议么?

当 ruby 找不到 Class 或模块时,会发生该错误。 我会开始:

  1. 检查 gem 依赖项(所有环境都相同吗?)
  2. 在您的代码中搜索任何定义 ClassName 的内容,尤其是模块、类和插件。
  3. 禁用开发中的每个插件,是否有任何插件突然导致该错误?
  4. 如果代码在 lib 中,请将 lib require 语句添加到您的 production.rb 以强制在生产中加载 lib。

希望有帮助。

更新只是为了总结意见,它是选项 4。

除非您只想在生产中加载 lib,否则您应该考虑通过执行以下操作之一来确保所有环境都加载 lib:

  1. 创建一个带有 require 的 rails 初始化程序(config/initializers 下的 a.rb 文件)
  2. 通过启用和修改 config.load_paths 变量,将路径添加到 config/environment.rb 中的 lib。

我在同一个文件中有多个 class 定义(所有 STI 类)。 当我将定义分成各自的文件时,它可以工作

暂无
暂无

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

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