Недавно я столкнулся с нечетной ошибкой, которая произошла только в режиме производства.Ошибка при перезаписывании класса Ruby проявляется только в производстве?
Я использовал дорожки славы, которые определяют класс Achievement (http://github.com/paulca/paths_of_glory/blob/master/app/models/achievement.rb).
В базовом классе, определяется уровень:
def level(level, options = {})
levels << {:level => level, :quota => options[:quota]}
end
Пути славы самоцвета работы, имея создавать модели, которые наследуют от базовой модели достижения.
Чтобы добавить дополнительный метод к базовому классу Achievement, мы (ошибочно, ретроспективно) создали новые модели/aachievements.rb (да, преднамеренная орфографическая ошибка, так как Rails попытается загрузить Achievement, если мы позвоним его success.rb), но вместо повторного открытия класса мы переопределили класс. Поскольку наше переопределение не включало уровень, когда мы были развернуты на производство, мы попали в ошибку, уровень которой был методом undef.
Вопрос в том, почему эта ошибка не проявилась в режиме разработки? Драгоценный камень и классы были одинаковыми в обоих.
Любые идеи?
Ну, эта ошибка произошла в производстве, так это значит, что это происходит, когда cached_classes включены? – shedd
Вот почему я сказал попробовать и с кешированными классами в разработке, а также - знаю, что происходит. –