Как зафиксировать / отладка 'ожидала, что x.rb определит X.rb' в направляющих

Я видел, что эта проблема возникает при многих различных обстоятельствах, и хотел бы получить лучшие практики для фиксации / отладка ее на StackOverflow.

Для использования примера реального мира, это произошло со мной этим утром:

expected announcement.rb to define Announcement

Класс хорошо работал в разработке, тестируя и от производственной консоли, но перестал работать от в производственной Полукровке. Вот класс:

class Announcement < ActiveRecord::Base
  has_attachment :content_type => 'audio/mp3', :storage => :s3
end

Проблема, которую я хотел бы обращенный в ответах, не так решает эту определенную проблему, но как правильно отладить, чтобы заставить направляющие давать Вам, значимая ошибка как ожидалось x.rb для определения X.rb' часто является отвлекающим маневром...

Редактирование (3 больших ответа до сих пор, каждый w/частичное решение)

Отладка:

  1. От Joe Van Dyk: Попытайтесь получить доступ к модели через консоль на среде / экземпляр, который вызывает ошибку (в случае выше: производство сценария/консоли затем вводит в 'Объявлении'.

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

Определенные причины:

  1. От Ian Terrell: если Вы используете attachment_fu, удостоверяются, что Вам установили процессор правильного образа. attachment_fu потребует его, даже если Вы не присоедините изображение.

  2. От Otto: удостоверьтесь, что Вы не назвали модель, которая конфликтует со встроенным классом направляющих, например: Запрос.

  3. От Josh Lewis: удостоверьтесь, что у Вас нет дублированного класса или имен модуля где-нибудь в Вашем приложении (или список Драгоценного камня).

22
задан Patrick Ritchie 27 August 2012 в 01:29
поделиться

5 ответов

Это - хитрое.

то, Что обычно работает на меня, должно выполнить "производство сценария/консоли" на рабочем сервере и ввести:

Announcement

, Который будет обычно давать Вам лучшее сообщение об ошибке. Но Вы сказали, что уже попробовали это?

11
ответ дан Joe Van Dyk 29 November 2019 в 05:36
поделиться

Я встретился с этим прежде, и AttachmentFu, плагин был виноват. Я верю в свой случай, которым это происходило из-за AttachmentFu ожидание различного процессора изображения, чем, что было доступно, или неподдерживаемые версии были также установлены. Проблема была решена, когда я явно добавил :with => :rmagick (или подобный - я использовал RMagick) к has_attachment вызов метода даже для вложений неизображения. , Очевидно, удостоверьтесь, что Ваша продуктивная среда имеет все правильные драгоценные камни (или заморозьте их в свое приложение), и поддерживающее программное обеспечение установленный (ImageMagick). YMMV.

Что касается не получения направляющих и AttachmentFu, чтобы высосать и скрыть реальную ошибку - мы зафиксировали его перед пониманием его полностью.

2
ответ дан Ian Terrell 29 November 2019 в 05:36
поделиться

Вы можете попробовать отключить все свои плагины и добавить их обратно по одному.

В environment.rb в разделе «Инициализатор» добавьте следующую строку:

config.plugins = [ :exception_notification, :ssl_requirement, :all ]

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

1
ответ дан Otto 29 November 2019 в 05:36
поделиться

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

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

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

0
ответ дан pix 29 November 2019 в 05:36
поделиться

У меня была эта проблема некоторое время, и в моем случае ошибке всегда предшествовала ошибка эта ошибка S3:

(AWS :: S3 :: Operation Aborted) "A конфликтующая условная операция в настоящее время против этого ресурс. Пожалуйста, попробуйте еще раз. »

Эта проблема обычно возникает при создании одной и той же корзины снова и снова. (Источник Форум разработчиков AWS )

Это произошло из-за того, что я использовал attachment_fu, чтобы создать бакет, и я разложил строку, содержащую команду Bucket.create (@@ bucket_name) в lib / technoweenie / attachment_fu / backends / s3_backends.rb ( рядом со строкой 152).

После того, как вы прокомментировали или удалили команду Bucket.create (@@ bucket_name) , проблема исчезла.

Надеюсь, это поможет.

1
ответ дан 29 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: