Я видел, что эта проблема возникает во многих разных обстоятельствах и хотела бы получить лучшие рекомендации по ее исправлению/отладке в StackOverflow.
Чтобы использовать пример реального мира, это произошло сегодня утром:
expected announcement.rb to define Announcement
Класс отлично работал в разработке, тестировании и с производственной консоли, но не смог в производстве Mongrel. Здесь класс:
class Announcement < ActiveRecord::Base
has_attachment :content_type => 'audio/mp3', :storage => :s3
end
Проблема, которую я хотел бы затронуть в ответах, заключается не столько в решении этой конкретной проблемы, а в том, как правильно отлаживать, чтобы получить Rails, чтобы дать вам значимую ошибку, как ожидалось. x.rb для определения X.rb 'часто является красным сельдь...
Изменить (3 замечательных ответа до сих пор, каждый с частичным решением)
Debugging:
-
От Joe Van Dyk: попробуйте получить доступ к модели через консоль в среде/экземпляре, которая вызывает ошибку (в приведенном выше примере: script/console production, затем введите "Объявление".
-
От Отто: попробуйте установить минимальный набор плагинов через инициализатор, например: config.plugins = [: exception_notification,: ssl_requirement,: all], затем повторно включить один за раз.
Конкретные причины:
-
От Ian Terrell: если вы используете attachment_fu, убедитесь, что у вас установлен правильный процессор изображений. attachment_fu потребует его, даже если вы не прикрепляете изображение.
-
От Отто: убедитесь, что вы не назвали модель, которая конфликтует со встроенным классом Rails, например: Request.
-
От Josh Lewis: убедитесь, что у вас нет дублированных имен классов или модулей где-то в вашем приложении (или в списке Gem).