Дело
У меня есть прикладной контроллер Rail 4 с методом index
, вот так:
def index
raise "Original Error"
rescue => e
puts "We caught: '#{e.inspect}'"
raise "Another Error"
end
Я ловлю Original Error
, обрабатывая его, массируя, делая все, что я хочу, а затем выбрасывая совершенно другую ошибку - Another Error
.
Ожидание
Поэтому ожидается, что мое приложение Rails выдаст Another Error
при посещении страницы индекса контроллера, а не Original Error
.
Неожиданное поведение
Но вместо этого я получаю Original Error
.Копирование журналов действия контроллера # здесь:
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)>
¯ \ _ (ツ) _ / ¯