Skip to content

Instantly share code, notes, and snippets.

@abriening
Forked from defunkt/connection_fix.rb
Created May 17, 2011 19:26
Show Gist options
  • Save abriening/977188 to your computer and use it in GitHub Desktop.
Save abriening/977188 to your computer and use it in GitHub Desktop.
MySQL server has gone away fix
## https://gist.github.com/977188
#
# If your workers are inactive for a long period of time, they'll
# lose their MySQL connection.
#
# This hack ensures we re-connect whenever a connection is lost.
#
# From: https://gist.github.com/238999
#
# Added retrying to prevent infinite loop.
#
module ActiveRecord::ConnectionAdapters
class MysqlAdapter
alias_method :execute_without_retry, :execute
def execute(*args)
result = execute_without_retry(*args)
@retrying = false
result
rescue ActiveRecord::StatementInvalid, Mysql::Error => e
if e.message =~ /server has gone away|query: not connected/i
unless @retrying
@retrying = true
warn "Server timed out, retrying"
reconnect!
retry
end
end
raise e
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment