覆盖Ruby类时出错只会在生产中出现?

时间:2010-07-22 21:03:46

标签: ruby-on-rails ruby rubygems ruby-on-rails-plugins

我最近遇到了一个奇怪的错误,只发生在生产模式中。

我使用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方法。

问题是,为什么这个错误在开发模式中没有表现出来?两者中的宝石和类都是相同的。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

除非您命名或删除了常量,否则您仍然会重新打开该类,或者首先定义您的类,然后由gem重新打开。

无论如何,在环境中打开development.rb中的缓存类,看看会发生什么。