mysql собирает соединения после периода бездействия. это определено в 'wait_timeout'.
Это можно увидеть в MySQL по:
mysql> показывать переменные типа 'wait_timeout'
по умолчанию это 8 часов. вы получаете эту ошибку, поскольку вы установили соединение, и за этот период не было выполнено ни одного запроса.
Activerecord имеет ActiveRecord :: Base # verify_active_connections! для этого варианта использования.
если вы укажетеReconnect: true в database.yml, он сделает это автоматически.
Вышеуказанный метод выполняется, когда мы извлекаем соединение из пула соединений, он защищает от неактивности.
Это не поможет вам, если вы выполняете длительный запрос, и он превышает период wait_timeout . Тогда вам, возможно, придется увеличить переменную timeout в mysql. Вы также можете попробовать установить патч в:
http://gist.github.com/238999 Это будет повторять запрос при такой ошибке, возможно, изменились обстоятельства, но исправление не является надежным, поскольку не имеет счетчика повторов.