【问题标题】:Error in an after hook, PG::InFailedSqlTransaction from Rspec后挂钩中的错误,来自 Rspec 的 PG::InFailedSqlTransaction
【发布时间】:2014-02-11 08:59:26
【问题描述】:

我试图从模型规范文件中运行 rspec,但我收到了以下错误:“An error occurred in an after hook”

"在钩子PG :: InFailedSqlTransaction之后发生错误: 错误:当前事务被中止,命令被忽略直到结束 交易。发生在 C:/Ruby193/lib/.../postgresql_adapter:294"

我在谷歌上搜索了这个问题,发现了将我的“database_cleaner”降级为“1.0.1”的建议。我做了,但它不起作用。 有谁知道如何解决这个问题?提前致谢!

【问题讨论】:

    标签: ruby-on-rails rspec gem


    【解决方案1】:

    如果您在事务范围内执行错误的 SQL 语句,从该语句中挽救异常,然后尝试在同一事务中执行另一个 SQL 语句,就会发生这种情况。

    一旦事务中的一条语句失败,就不能在该事务中执行更多语句。

    这是一个例子:

    ActiveRecord::Base.transaction do
      begin
        ActiveRecord::Base.connection.execute "A bad query"
      rescue => ex 
        puts ex.message
      end
      puts User.count
    end
    

    User.count 引发 PG::InFailedSqlTransaction 是因为之前的 SQL 语句引发了 ActiveRecord::StatementInvalid 并被 rescue 吞噬。

    所以我会寻找在事务范围内救援的代码,然后尝试运行其他 SQL 语句。

    【讨论】:

    • 这个错误发生在我的ActiveRecord回调中,如果我理解正确,所有回调都包装在一个事务中,如何确定哪一个是根本原因? (同时查了源码,在源码中没有找到rescue
    • @Ryan Lyu 你找到解决办法了吗?
    猜你喜欢
    • 2018-03-08
    • 2014-02-03
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多