Skip to content

Instantly share code, notes, and snippets.

@eric
Forked from defunkt/connection_fix.rb
Created August 3, 2011 23:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save eric/1124187 to your computer and use it in GitHub Desktop.
Save eric/1124187 to your computer and use it in GitHub Desktop.
MySQL server has gone away fix
# 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. Because, really. why not?
#
# Stick this in RAILS_ROOT/config/initializers/connection_fix.rb (or somewhere similar)
#
# From:
# http://coderrr.wordpress.com/2009/01/08/activerecord-threading-issues-and-resolutions/
#
# Modified by Eric Lindvall <eric@sevenscale.com> to prevent a reconnect from happening
# during an open transaction.
#
class ActiveRecord::ConnectionAdapters::MysqlAdapter
alias_method :execute_without_retry, :execute
def execute(*args)
retried = false
execute_without_retry(*args)
rescue ActiveRecord::StatementInvalid => e
if !retried && open_transactions.zero? && e.message =~ /^Mysql::Error: (MySQL server has gone away|Lost connection to MySQL server at|query: not connected:)/i
retried = true
warn "Server timed out, retrying"
reconnect!
retry
else
raise
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment