Mysql ActiveRecord3死锁重试

Mysql ActiveRecord3死锁重试,mysql,ruby-on-rails-3,deadlock,Mysql,Ruby On Rails 3,Deadlock,Rails 3(或ActiveRecord 3)是否有复制旧插件的插件?或者,该插件是否仍然适用于Rails 3?我甚至不知道有这样一个插件:) 下面是我们使用的内容(但您必须自己在其中包装易于死锁的查询): 有一个gem不仅适用于rails3+,而且支持所有主要数据库(MySQL、PostgreSQL和SQLite)。它以清洁和经过良好测试的方式在市场上销售。 “死锁重试允许数据库适配器(当前仅使用 MySQLAdapter)重试陷入死锁的事务。它将重试 这样的交易进行了三次才最终失败 此功能

Rails 3(或ActiveRecord 3)是否有复制旧插件的插件?或者,该插件是否仍然适用于Rails 3?

我甚至不知道有这样一个插件:)

下面是我们使用的内容(但您必须自己在其中包装易于死锁的查询):

有一个gem不仅适用于rails3+,而且支持所有主要数据库(MySQL、PostgreSQL和SQLite)。它以清洁和经过良好测试的方式在市场上销售。

“死锁重试允许数据库适配器(当前仅使用 MySQLAdapter)重试陷入死锁的事务。它将重试 这样的交易进行了三次才最终失败


此功能会自动添加到ActiveRecord。无需更改代码或其他方式。”

这让我省去了一点麻烦。谢谢。re“此功能自动添加到ActiveRecord”-试图找到证实这一点的来源,google fu让我失望。你能告诉我AR core中对此的描述吗?我想你可能误解了——海报引用的gem(rails/deadlock\u retry)自动将此添加到活动记录中。嗯,上次提交是2018年6月,但在此之前是2013年6月。一个5年的窗口期,没有对宝石采取任何措施。我对此表示怀疑。我很想知道是否有人在Rails 4+中使用了这个功能。我们现在正在Rails 4.2.11应用程序中试用,它似乎工作得很好。它完全解决了我们在密集、并发导入过程中所看到的死锁问题,而且据我们所知,似乎没有引起任何其他问题。
# Executes the given block +retries+ times (or forever, if explicitly given nil),
# catching and retrying SQL Deadlock errors.
def retry_lock_error(retries = 100, &block)
  begin
    yield
  rescue ActiveRecord::StatementInvalid => e
    if e.message =~ /Deadlock found when trying to get lock/ and (retries.nil? || retries > 0)
      retry_lock_error(retries ? retries - 1 : nil, &block)
    else
      raise e
    end
  end
end