如何为 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 关联?