Вопрос

У меня есть 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

Тайм-ауты в приведенном выше решении кажутся мне немного высокими.Вы не хотите, чтобы тайм-ауты вашей БД были слишком малы из-за объема памяти, которую может использовать соединение.Если соединение потеряно, вы хотите, чтобы время его ожидания истекло в разумных пределах (например, не через неделю).

Другие советы

В других местах я также получил следующие предложения:

  1. Попробуйте установитьconfig.active_record.verification_timeout к чему -то ниже, чем то, что настройка тайм -аута подключения MySQL.

  2. Есть драгоценный камень, позволяющий обойти эту проблему: mysql_retry_lost_connection

     http://rubyforge.org/projects/zventstools/
     "Reconnect to the MySQL server when you hit a lost connection error".
    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top