Предотвращение исключений Mongrel/Mysql Errno::EPIPE
-
02-07-2019 - |
Вопрос
У меня есть Rails-приложение, в котором я нечасто обслуживаю XML.Это выполняется с помощью mongrel и mysql.Я обнаружил, что если я не использую приложение более нескольких часов, оно отключается и начинает выдавать ошибки Errno::EPIPE.Кажется, что время ожидания соединения MySQL истекло из-за бездействия или чего-то в этом роде.
Его можно перезапустить с помощью «mongrel_rails restart -P /path/to/the/mongrel.pid» …но это не совсем решение.Мой соавтор ожидает, что приложение будет там, когда он работает (а меня, скорее всего, нет рядом).
Мой вопрос:
- Что я могу сделать, чтобы предотвратить возникновение этой проблемы в первую очередь?(например.не отвлекайте меня!!).
- В противном случае, есть ли какой-нибудь код, который я могу куда-нибудь вставить, чтобы автоматически переделать соединение с БД?
Решение
Вот решение:
https://boxpanel.blueboxgrp.com/public/the_vault/index.php/Mongrel_/_MySQL_Timeout
Тайм-ауты в приведенном выше решении кажутся мне немного высокими.Вы не хотите, чтобы тайм-ауты вашей БД были слишком малы из-за объема памяти, которую может использовать соединение.Если соединение потеряно, вы хотите, чтобы время его ожидания истекло в разумных пределах (например, не через неделю).
Другие советы
В других местах я также получил следующие предложения:
Попробуйте установитьconfig.active_record.verification_timeout к чему -то ниже, чем то, что настройка тайм -аута подключения MySQL.
Есть драгоценный камень, позволяющий обойти эту проблему: mysql_retry_lost_connection
http://rubyforge.org/projects/zventstools/ "Reconnect to the MySQL server when you hit a lost connection error".