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?
Foi útil?

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:

  1. 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 é.

  2. 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".
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top