我最近遇到了一个奇怪的错误,只发生在生产模式中。
我使用glory gem的路径来定义类成就(http://github.com/paulca/paths_of_glory/blob/master/app/models/achievement.rb)。
在基类中,定义了级别:
def level(level, options = {})
levels << {:level => level, :quota => options[:quota]}
end
glory gem的路径通过让您创建从基本成就模型继承的模型来实现。
为了向基础成就类添加一个额外的方法,我们(错误地,回想起来)创建了一个新模型/ aachievements.rb(是的,故意拼写错误,因为如果我们调用它,Rails将尝试加载Achievement achievement.rb)文件然而,我们重新定义了类,而不是重新打开类。因为我们的重新定义不包括级别,所以当我们部署到生产时,我们遇到的错误是该级别是undef方法。
问题是,为什么这个错误在开发模式中没有表现出来?两者中的宝石和类都是相同的。
有什么想法吗?
答案 0 :(得分:1)
除非您命名或删除了常量,否则您仍然会重新打开该类,或者首先定义您的类,然后由gem重新打开。
无论如何,在环境中打开development.rb中的缓存类,看看会发生什么。