Хорошо, думаю, я решил свою проблему. Я не заметил этого, когда отправил свой вопрос, но казалось, что ошибка связана с тайм-аутом: примерно через 20 секунд activerecord теряет соединение.
$ rails runner "sleep 23; puts ActiveRecord::Base.connection.active?"
=> true
$ rails runner "sleep 25; puts ActiveRecord::Base.connection.active?"
=> false
Итак, я продолжил копать и понял, что гемы mysql и mysql2 не работают с параметром MySQL 'wait_timeout' так же, как и в случае с mysql, гем не устанавливает его, поэтому использует значение по умолчанию MySQL 28800 тогда как mysql2 gem устанавливает его в 2592000 , если он не определен в database.yml.
Но у меня сложилось впечатление, что значение 2592000 превышает максимальное значение для этого параметра: 2147483 ! Что может привести к неожиданному поведению, которое я описал ...
Я создаю тестовый скрипт, показывающий ошибку: https://gist.github.com/1514154
И если при загрузке консоли rails у меня был какой-то случайный разрыв соединения (см. Мой вопрос), я думаю, это из-за того, что моему приложению потребовалось много времени для загрузки, и я иногда ждал несколько секунд, прежде чем набрать свою команду.
Я не могу объяснить, почему мы так мало сталкиваемся с этой проблемой. Возможно, это относится к моему conf (удаленная база данных, версия MySQL?). Я пытался с другой удаленной базой данных: ошибка не воспроизводится ...
Итак, в заключение я установлю wait_timeout: 2147483
в моем database.yml. А может быть, потяните запрос рельсы ...