2011-03-30 87 views
4

如何在ActiveRecord中设置mysql查询超时?我希望把它设置得很短,比如10-15ms。这是一个Sinatra ruby​​网络应用程序。如何为mysql设置ActiveRecord查询超时?

谢谢。

+0

我在[另一个问题中的回答](http://stackoverflow.com/a/37937788/316700)中有这方面的一些发现, – fguillen 2016-06-21 07:23:53

回答

7

那么,它会出现这些每线29和30 mysql_adapter.rb,

@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秒的读取和写入超时。不幸的是,这不允许您设置亚秒超时。

0

你也可以将其设置在每个连接的基础是这样的:

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

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