Как мне отладить ошибку в геме? - PullRequest
1 голос
/ 18 февраля 2011

Я получаю эту ошибку с Скрепкой gem.

NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.size):
  paperclip (2.3.8) lib/paperclip/attachment.rb:104:in `assign'

Как я могу отладить это, видя, что это в драгоценном камне? Если бы это был мой код, я бы добавил несколько puts, чтобы посмотреть, что происходит, но я не могу сделать это здесь. Я использую Rails 3.0.1

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

вот мой лучший выстрел.

  • Откройте один из ваших контроллеров и добавьте к нему строку debugger. Нам нужен отладчик для установки точки останова
  • Далее run rails --debug
  • перейти на страницу / контроллер с точкой останова
  • появится консоль отладчика.
  • run Gem.find_files("attachment.rb") <- я вызову $ GEM_ROOT для пути, который это возвращает </li>
  • run list $GEM_ROOT/lib/paperclip/attachment.rb:104 - это покажет код вокруг области, где произошла ошибка.
  • run b $GEM_ROOT/lib/paperclip/attachment.rb:$LINE - замените $ LINE хорошим кандидатом на точку останова.
  • пробег cont
  • нажмите на страницу / действие, которое вызывает ошибку, и консоль отладки должна открыться в точке останова.

Я думаю, что должен быть способ получить путь к файлу gem программно, но я понятия не имею, как это сделать: (

0 голосов
/ 27 января 2014

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

Будьте внимательны, достигается ли введенная вами команда debugger, когда rails обслуживает запрос, который вы пытаетесь.С контроллером вы можете не войти в контроллер сразу.Иногда существуют фильтры before или вспомогательные методы, которые сокращают контроллер и возвращают его.В качестве примера рассмотрим devise gem before_filter :authenticate_user!.

Если вы используете bundler, и большинство из нас в настоящее время используют, команда bundle show paperclip, выданная из корневого каталога вашего проекта, покажет вамгде найти исходный код для драгоценного камня paperclip.

Кроме того, вам необходимо перезапустить сервер после вставки оператора debugger.

...