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

时间:2009-02-24 05:42:07

标签: ruby-on-rails ruby

每当我尝试使用“script / runner -e production ClassName.run”从我的rails 2.2 app的lib目录运行任何类时,我收到以下错误:

/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是一种类方法,即def self.run .... end

有什么建议吗?

2 个答案:

答案 0 :(得分:10)

当ruby找不到类或模块时,会发生该错误。我将从以下开始:

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

    更新只是总结一下选项4的评论。

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

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

答案 1 :(得分:1)

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