Вызов еще одной ошибки из блока спасения выдает исходную ошибку, которая привела нас в блок спасения. - PullRequest
0 голосов
/ 01 февраля 2019

Дело

У меня есть прикладной контроллер 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)>

¯ \ _ (ツ) _ / ¯

...