Включить дамп стека при исключении в консоли Rails

Я использую Ruby on Rails с драгоценным камнем pry. Когда во время задачи rake возникает ошибка, я получаю очень хорошую трассировку стека.

Однако, когда я делаю что-то в своей консоли rails, что вызывает исключение, я вижу только сообщение об ошибке и одну строку кода, которая его вызвала (которая большую часть времени находится где-то в ядре rails).

Есть ли способ включить эти дампы стека в консоли?


person The Pellmeister    schedule 15.07.2013    source источник


Ответы (2)


Я сам нашел решение.

Судя по всему, мне нужна была команда wtf? из pry.

[7] project »  p.known_attributes
NoMethodError: undefined method `foo' for #<Bar:0x007f871fd12a38>
from /[...]/gems/activemodel-4.0.0/lib/active_model/attribute_methods.rb:436:in `method_missing'

[8] project »  wtf?
Exception: NoMethodError: undefined method `foo' for #<Bar:0x007f871fd12a38>
--
[... stack dump ...]  

[9] project »  
person The Pellmeister    schedule 15.07.2013
comment
Это делает меня счастливой - person Ross Hambrick; 23.05.2017

Когда в консоли есть ошибка, вы должны увидеть что-то вроде этого

$ rails c
Loading development environment (Rails 4.0.0)
irb(main):001:0> no_method
NameError: undefined local variable or method `no_method' for main:Object
    from (irb):1
    from /Users/michal/Projects/tennisliga/.gems/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
    from /Users/michal/Projects/tennisliga/.gems/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
    from /Users/michal/Projects/tennisliga/.gems/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

В чем проблема? Вы не видите трассировку стека?

РЕДАКТИРОВАТЬ: Если вы используете pry и хотели бы увидеть больше трассировки стека, обратитесь к pry wiki Краткий пример (показать все строки)

Pry.config.exception_handler = proc do |output, exception, _pry_|
  output.puts "#{exception}"
  output.puts "#{exception.backtrace}"
end
person Mike Szyndel    schedule 15.07.2013
comment
Когда я делаю именно это, я получаю только NameError: undefined local variable or method 'no_method' for main:Object from (pry):1:in '<main>'. Нет дампа стека. - person The Pellmeister; 15.07.2013
comment
Я только сейчас вижу, что прай может приложить к этому руку. Возможно ли это? - person The Pellmeister; 15.07.2013
comment
У вас установлен pry как консоль по умолчанию? - person Mike Szyndel; 15.07.2013
comment
Да, если я запускаю rails c, я попадаю в подглядывание. - person The Pellmeister; 15.07.2013
comment
Так что я думаю, что это какая-то настройка любопытства. Я думаю, это твой ответ. - person Mike Szyndel; 15.07.2013
comment
Спасибо! Я сам немного покопался, и оказалось, что последнее исключение доступно после того, как оно возникло в переменной _ex_, так что вы можете открыть его, используя _ex_.pry, или дамп стека в _ex_.backtrace. Мне просто нравится команда wtf?, она дала мне то, что мне нужно было знать, без накладных расходов. - person The Pellmeister; 15.07.2013