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

时间:2011-03-30 01:04:30

标签: mysql activerecord timeout

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

感谢。

2 个答案:

答案 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,但是为我长时间运行的夜间脚本覆盖它。