2009-02-24 119 views
5

每次我尝试使用从我的轨道上运行的任何类2.2应用程序的lib目录‘脚本/亚军-e生产ClassName.run’我得到以下错误:`const_missing“:未初始化的常数(NameError)

/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

任何建议?

回答

10

当ruby找不到类或模块时发生该错误。我想通过开出:

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

希望有所帮助。

更新只是为了总结的意见是选项4

除非你只需要加载的lib在生产中你应该想想确保所有环境中通过执行下列操作之一加载的lib:

  1. 创建一个轨道初始化(下配置/初始化一个文件名为.rb)与要求在它
  2. 通过启用和修改config.load_paths变量添加的路径的lib在配置/ environment.rb中。
+0

就是这样。问题中缺少的类是我在lib中定义的类。即使是简单的东西,比如将类名与文件名进行匹配,简而言之就是它的定义。我不知道我错过了什么,因为它在dev上运行良好,并且 测试只是没有生产 – chaostheory 2009-02-24 20:18:42

1

我在同一个文件上有多个类定义(所有的STI类)。当我将定义分离到各自的文件中时,它的作品

相关问题