При использовании транзакций в Sequel вы должны иметь возможность поднять исключение и вывести его из блока транзакций.Последовательные транзакции обертывают исключения вместо их ререйзинга
Из документации Sequel:
Если какое-либо другое исключение возникает, транзакция откатывается, и возбуждается исключение вне блока:
DB.transaction do # BEGIN
raise ArgumentError
end # ROLLBACK
# ArgumentError raised
Тем не менее, кажется, Я не могу поймать ArgumentError
, так как Sequel обертывает его в Sequel::DatabaseError
:
begin
DB.transaction do
raise ArgumentError.new('Hey')
end
rescue => e
puts e.inspect
puts e.kind_of?(ArgumentError)
end
Результат:
> #<Sequel::DatabaseError: ArgumentError: Hey>
> false
Как я могу решить эту проблему?
Будет ли это работать? 'puts e.message ['ArgumentError'] == 'ArgumentError'' –
Да, но это хаки, и если исключение является частью глубокой иерархии, оно испортило поток исключений, поэтому я предпочел бы избежать такого решения. – Seralize
Затем 'puts e.message == 'Hey''? должен работать тогда. Это поможет вам понять, откуда происходит ошибка. –