Prevenir Mongrel / Mysql Errno :: exceções EPIPE
-
02-07-2019 - |
Pergunta
Eu tenho uma aplicação rails que eu servindo-se XML em uma base freqüente. Isso está sendo executado com o vira-lata e mysql. Descobri que se eu não exercer o aplicativo por mais de algumas horas ele vai morto e começa jogando erros Errno :: EPIPE. Parece que o get conexão mysql expirou por inatividade ou algo parecido.
Ele pode ser reiniciado com 'mongrel_rails restart -P /path/to/the/mongrel.pid' ... mas isso não é realmente uma solução. Meu colaborador espera que o aplicativo para estar lá quando ele está trabalhando em sua parte (e estou muito provavelmente não ao redor).
A minha pergunta é:
- O que posso fazer para evitar esse problema ocorra no 1º lugar? (Por exemplo, não o tempo me out !!).
- Na falta deste, há algum código que pode inserir um lugar para automaticamente refazer a ligação Db?
Solução
Aqui está uma solução:
https://boxpanel.blueboxgrp.com/public/the_vault /index.php/Mongrel_/_MySQL_Timeout
Os limites de tempo na solução acima parece um pouco alto para mim. Você não quer que seus tempos de espera DB a ser muito baixo, por causa da quantidade de memória de uma conexão pode usar. Se uma conexão é órfão, você quer que o limite de tempo razoável (como não em uma semana.)
Outras dicas
Em outros lugares, eu também tenho as seguintes sugestões:
-
configuração Try config.active_record.verification_timeout para algo menor do que o que quer sua configuração de tempo limite de conexão mysql é.
-
Há uma jóia para contornar este problema: mysql_retry_lost_connection
http://rubyforge.org/projects/zventstools/ "Reconnect to the MySQL server when you hit a lost connection error".