如何在ActiveRecord中设置mysql查询超时?我希望把它设置得很短,比如10-15ms。这是一个Sinatra ruby网络应用程序。
感谢。
答案 0 :(得分:7)
好吧,按照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秒的读写超时。不幸的是,这不允许您设置亚秒级超时。
答案 1 :(得分:1)
你也可以在每个连接的基础上设置它:
ActiveRecord::Base.connection.instance_variable_get('@connection').instance_variable_set('@read_timeout', 0)
我这样做是为了拥有一个默认的read_timeout,但是为我长时间运行的夜间脚本覆盖它。