【问题标题】:Does a rollback still occur if I use begin...rescue and an error occurs?如果我使用 begin...rescue 并发生错误,是否仍会发生回滚?
【发布时间】:2011-02-08 22:58:48
【问题描述】:

我的 rails 应用程序中发生了一些奇怪的错误,我正在尝试记录更好的错误,而不是我不关心的所有乘客信息。我想我会用 Rescue 子句和显式错误处理来做到这一点,比如记录 params 哈希。但我担心这是否会中断正在发生的任何回滚。就此而言,我假设作为正常 rails 错误处理的一部分发生错误时会自动发生回滚,但我无法在任何地方找到记录。我正在将 Dreamhost 与 MySQL 一起使用,所以我认为事务和回滚正在那里发生。

【问题讨论】:

    标签: ruby-on-rails error-handling transactions


    【解决方案1】:

    这不是非常可取的(对您的代码进行大量的开始救援)。

    为什么不使用回溯消音器? (来自 Rails 2.3) http://afreshcup.com/home/2008/11/29/rails-23-backtrace-silencing.html.

    来自release notes

    Rails 会自动将消音器添加到 摆脱最常见的噪音 新的应用程序,并建立一个 config/backtrace_silencers.rb 文件到 保留自己的补充

    如果您使用早期版本的 Rails,请使用 http://github.com/thoughtbot/quietbacktrace

    【讨论】:

    • 谢谢,这对嘈杂的堆栈跟踪很有帮助,但没有回答有关回滚的原始问题;就此而言,为什么不建议在我的代码中添加一个大的开始救援?
    • 好吧..只要您重新提出错误,这是可取的。 Rails 处理一些特殊情况(EG ActiveRecord::RecordNotFound 被拯救为公共请求,而是返回 404 标头)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2019-08-24
    • 2010-10-13
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多