You'll get this error if your workers are idle for an extended period of time. They'll lose their MySQL connection and any subsequent statements will fail.
This post explains a few possible solutions. For us, automatically re-connecting fits best. We don't care if the connection has gone away.
Just stick this code in
never worry again!
module ActiveRecord::ConnectionAdapters class MysqlAdapter alias_method :execute_without_retry, :execute def execute(*args) execute_without_retry(*args) rescue ActiveRecord::StatementInvalid => e if e.message =~ /server has gone away/i warn "Server timed out, retrying" reconnect! retry else raise e end end end end
I completely forgot we ran into this problem so neglected to mention it in the Resque documentation. Sorry Garry!