Как исправить / отладить 'ожидаемый x.rb для определения X.rb' в Rails - PullRequest
22 голосов
/ 18 сентября 2008

Я видел, как эта проблема возникает в самых разных обстоятельствах, и хотел бы получить рекомендации по ее исправлению / отладке в 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:

  1. От Джо Ван Дейка: попробуйте получить доступ к модели через консоль в среде / экземпляре, которая вызывает ошибку (в случае выше: создание сценария / консоли, затем введите «Объявление».

  2. От Отто: Попробуйте установить минимальный набор плагинов через инициализатор, например: config.plugins = [: exception_notification,: ssl_requirement,: all], затем включите по одному за раз.

Конкретные причины:

  1. От Иана Террелла: если вы используете attachment_fu, убедитесь, что у вас установлен правильный процессор изображений. attachment_fu потребует его, даже если вы не прикрепляете изображение.

  2. От Отто: убедитесь, что вы не назвали модель, которая конфликтует со встроенным классом Rails, например: Request.

  3. От Джоша Льюиса: убедитесь, что у вас нет дублированных имен классов или модулей в вашем приложении (или списке драгоценных камней).

Ответы [ 13 ]

0 голосов
/ 22 августа 2012

Я получал этот дуэт ошибок для определения контроллера, находящегося в файле, который не был назван контроллером. Например, у вас есть модель Comment, и вы определяете контроллер в файле comment.rb вместо comments_controller.rb

0 голосов
/ 13 июля 2011

Извините, это не окончательный ответ, но другой подход, который может работать в определенных обстоятельствах:

Я только что столкнулся с этой проблемой при отладке сайта с использованием Ruby 1.8.7 и Merb 1.0.15. Казалось, что рассматриваемый класс (назовем его SomeClass) выпадает из области видимости, но когда файл some_class.rb автоматически загружается, другие необходимые ему файлы (some_class / base.rb и т. Д.) Не загружаются механизмом require. Возможно, ошибка в require?

Если мне раньше требовался файл some_class, например, конец среды.rb, он, похоже, предотвращает выпадение объекта из области видимости.

0 голосов
/ 17 июня 2011

в моем случае я получаю эту ошибку в консоли разработки, но могу загрузить класс в irb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...