如何为 mysql 设置 ActiveRecord 查询超时?

Posted

技术标签:

【中文标题】如何为 mysql 设置 ActiveRecord 查询超时?【英文标题】:How do I set the ActiveRecord query timeout for mysql? 【发布时间】:2011-07-25 17:53:06 【问题描述】:

如何在 ActiveRecord 中设置 mysql 查询超时?我希望将其设置为非常短的值,例如 10-15 毫秒。这是针对 Sinatra ruby​​ 网络应用程序的。

谢谢。

【问题讨论】:

我在answer in another question中对此有一些发现 【参考方案1】:

好吧,根据 mysql_adapter.rb 中的这些第 29 和 30 行,

  @connection.options(Mysql::OPT_READ_TIMEOUT, @config[:read_timeout]) if @config[:read_timeout]
  @connection.options(Mysql::OPT_WRITE_TIMEOUT, @config[:write_timeout]) if @config[:write_timeout]

只需将 read_timeout 和 write_timeout 值添加到 .yaml 数据库配置文件即可。

因此,

development:
  adapter: mysql
  encoding: utf8
  database: app_development
  pool: 5
  username: root
  password: 
  write_timeout: 1
  read_timeout: 1

应该设置每个 1 秒的读取和写入超时。不幸的是,这不允许您设置亚秒级超时。

【讨论】:

【参考方案2】:

您也可以像这样在每个连接的基础上设置它:

ActiveRecord::Base.connection.instance_variable_get('@connection').instance_variable_set('@read_timeout', 0)

例如,我这样做是为了有一个默认的 read_timeout,但会为我长时间运行的夜间脚本覆盖它。

【讨论】:

以上是关于如何为 mysql 设置 ActiveRecord 查询超时?的主要内容,如果未能解决你的问题,请参考以下文章

Rails:如何为 Rails activerecord 模型中的属性创建默认值? [复制]

如何为现有数据库生成 Castle ActiveRecord C# 类

Rails 5 - 如何为activerecord获取serializable_hash?

如何为一个成员强制设置 has_many_through 关联?

如何为mysql xampp,windows设置默认排序规则

如何为 MySQL 客户端设置默认寻呼机?