我有一个带有index
方法的Rail 4应用程序控制器,如下所示:
def index
raise "Original Error"
rescue => e
puts "We caught: '#{e.inspect}'"
raise "Another Error"
end
我正在抓捕Original Error
,对其进行处理,按摩,做我想做的一切,然后抛出一个完全不同的错误-Another Error
。
因此,当我访问控制器的索引页面而不是Another Error
时,我的Rails应用程序将产生Original Error
。
但是我实际上正在获取Original Error
。在此处复制controller#action的日志:
Started GET "/homepage" for 127.0.0.1 at 2019-02-06 18:50:19 +0800
We caught: '#<RuntimeError: Original Error>'
Completed 500 Internal Server Error in 205ms (Flexirest: 0.0ms for 0 calls | ActiveRecord: 9.7ms)
RuntimeError - Original Error:
app/controllers/homepage_controller.rb:6:in `index'
为什么将Original Error
而不是Another Error
扔在这里?
我将相同的index
方法行复制粘贴到我的Rails控制台中,然后直接从控制台内部调用index
方法。这是控制台的输出。
[49] pry(main)> def index
[49] pry(main)* raise "Original Error"
[49] pry(main)* rescue => e
[49] pry(main)* puts "We caught: '#{e.inspect}'"
[49] pry(main)* raise "Another Error"
[49] pry(main)* end
=> :index
[50] pry(main)> index
We caught: '#<RuntimeError: Original Error>'
RuntimeError: Another Error
from (pry):67:in `rescue in index'
[51] pry(main)>