2011-03-30 26 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,但覆蓋它爲我的長時間運行的夜間腳本。