Rails,production-env,“Object is not missing constant”

时间:2010-10-30 01:44:11

标签: ruby-on-rails

所以我觉得我很傻,并且没有检查生产环境中的运行很长一段时间,现在我正在尝试部署,我收到了这个恼人的错误。有什么想法吗?

LIB / history_tools.rb

module HistoryTools
  def self.included(base)
    base.has_many :history, :dependent => :destroy
    History::TYPES.each do |htype|
      base.has_many "history_#{htype}", :class_name => "History::#{htype.capitalize}"
    end
  end
  # ... other minor things removed ...
end

应用程序/模型/ user.rb

class User < InheritedResources::Base
  include HistoryTools
end

到config / environment.rb

# ... the usual stuff, then, at the very bottom:
require 'history_tools'

这给出了错误:

activesupport-2.3.8/lib/active_support/dependencies.rb:417:in
`load_missing_constant':ArgumentError: Object is not missing
 constant HistoryTools!

如果我在user.rb的顶部添加了一个额外的require 'history_tools',它会修复 错误,我相信,但是它在找不到#{RAILS_ROOT}/lib中的其他内容时失败了,在环境中以相同的方式在.rb中需要。

踢球者:这在开发模式下非常有效。它只会在生产中出现此错误。我的大多数谷歌搜索似乎表明“不丢失常量”错误与Rails如何自动加载文件有关,这些文件在没有卸载时应该在生产中消失。这似乎与这种行为相反?

4 个答案:

答案 0 :(得分:3)

当我收到此错误时,这是​​因为错误中提到的类/模块内部类/模块中存在错误。

答案 1 :(得分:2)

我不能说这是拼写错误还是真正的代码,但是:

class User < InheritedResources::Base
  include HistoryTools
end

应该是

class User < ActiveRecord::Base
  include HistoryTools
end

InheritedResources应该用于控制器,而不是模型。

答案 2 :(得分:0)

您不必在environment.rb中拥有require'history_tools'。在该版本的Rails中,lib文件夹中的所有文件都应自动加载。

答案 3 :(得分:0)

好吧,经过多长时间的挖掘后,它似乎根本就与这些东西无关。这是一个关于树下3个类的错误,这是因为另一个奇怪的原因而失败,并且异常显然被某个地方的轨道内部捕获并且被忽略了。

不幸的是,这并没有解释为什么它在开发模式下工作,但至少我的所有东西现在都有效。不管怎样,谢谢!