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

cha*_*ory 5 ruby ruby-on-rails

每次我尝试使用"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)"
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我运行它,因为我没有得到这个错误test,而不是production,和一切工作正常.

O是的,run是一种类方法,即def self.run .... end

有什么建议?

rob*_*ill 10

当ruby找不到类或模块时,会发生该错误.我从一开始:

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

希望有所帮助.

更新只是总结评论它是选项4.

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

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