Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Это - хитрое.
то, Что обычно работает на меня, должно выполнить "производство сценария/консоли" на рабочем сервере и ввести:
Announcement
, Который будет обычно давать Вам лучшее сообщение об ошибке. Но Вы сказали, что уже попробовали это?
Я встретился с этим прежде, и AttachmentFu
, плагин был виноват. Я верю в свой случай, которым это происходило из-за AttachmentFu
ожидание различного процессора изображения, чем, что было доступно, или неподдерживаемые версии были также установлены. Проблема была решена, когда я явно добавил :with => :rmagick
(или подобный - я использовал RMagick) к has_attachment
вызов метода даже для вложений неизображения. , Очевидно, удостоверьтесь, что Ваша продуктивная среда имеет все правильные драгоценные камни (или заморозьте их в свое приложение), и поддерживающее программное обеспечение установленный (ImageMagick). YMMV.
Что касается не получения направляющих и AttachmentFu, чтобы высосать и скрыть реальную ошибку - мы зафиксировали его перед пониманием его полностью.
Вы можете попробовать отключить все свои плагины и добавить их обратно по одному.
В environment.rb
в разделе «Инициализатор» добавьте следующую строку:
config.plugins = [ :exception_notification, :ssl_requirement, :all ]
Начните с минимального набора, установленного для запуска приложения, и добавьте их по одному. Я обычно получаю эту ошибку, когда определяю модель, которая отображается на существующее имя файла. Например, модель Request, но в Rails уже есть request.rb, который загружается первым.
Извините, это не окончательный ответ, но другой подход, который может работать в определенных обстоятельствах:
Я только столкнулся с этой проблемой при отладке сайта с использованием Ruby 1.8.7 и Merb 1.0.15 , Казалось, что рассматриваемый класс (назовем его SomeClass) выходит из области видимости, но когда файл some_class.rb был автоматически загружен, другие необходимые ему файлы (some_class / base.rb и т. Д.) Не были загружены механизмом require. Возможно, ошибка в require?
Если раньше мне требовался файл some_class, такой как конец environment.rb, он, похоже, предотвращал выпадение объекта из области видимости.
У меня была эта проблема некоторое время, и в моем случае ошибке всегда предшествовала ошибка эта ошибка 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)
, проблема исчезла.
Надеюсь, это поможет.