我将 Ruby on Rails 与 pry gem 一起使用。当 rake 任务期间发生错误时,我会得到一个非常好的堆栈跟踪。
但是,当我在 Rails 控制台中执行某些触发异常的操作时,我只能看到错误消息和触发它的一行代码(大部分时间都在 Rails 核心中的某个位置)。
有没有办法在控制台中启用这些堆栈转储?
我将 Ruby on Rails 与 pry gem 一起使用。当 rake 任务期间发生错误时,我会得到一个非常好的堆栈跟踪。
但是,当我在 Rails 控制台中执行某些触发异常的操作时,我只能看到错误消息和触发它的一行代码(大部分时间都在 Rails 核心中的某个位置)。
有没有办法在控制台中启用这些堆栈转储?
我自己找到了解决方案。
显然,我需要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 »
当控制台出现错误时,您应该会看到类似这样的内容
$ 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