让ActiveRecord在失出连接后自动重新连接数据库

看到了这个,也可以对大家有用,所以就贴出来了。
原文地址:http://snippets.dzone.com/posts/show/5519

我将以下的代码命名为active_record_hacks.rb放在config/initializers目录中,但是它也可以很容易地作为插件使用。

ActiveRecord::ConnectionAdapters::MysqlAdapter.module_eval do
  def execute_with_retry_once(sql, name = nil)
    retried = false
    begin
      execute_without_retry_once(sql, name)
    rescue ActiveRecord::StatementInvalid => exception
      ActiveRecord::Base.logger.info "#{exception}, retried? #{retried}"

      # Our database connection has gone away, reconnect and retry this method
      reconnect!
      unless retried
        retried = true
        retry
      end
    end
  end

  alias_method_chain :execute, :retry_once
end

你可能感兴趣的:(sql,Ruby,ActiveRecord)