Prevenire le eccezioni di Mongrel / Mysql Errno :: EPIPE
-
02-07-2019 - |
Domanda
Ho un'app di rotaie che offro XML su una base rara. Questo viene eseguito con ibrido e mysql. Ho scoperto che se non esercito l'app per più di qualche ora, si spegne e inizia a generare errori Errno :: EPIPE. Sembra che la connessione mysql sia scaduta per inattività o qualcosa del genere.
Può essere riavviato con 'mongrel_rails restart -P /path/to/the/mongrel.pid' ... ma non è proprio una soluzione. Il mio collaboratore si aspetta che l'app sia lì quando sta lavorando da parte sua (e molto probabilmente non ci sono).
La mia domanda è:
- Cosa posso fare per evitare che questo problema si verifichi in primo luogo? (ad esempio, non prendermi in giro !!).
- In caso contrario, c'è del codice che posso inserire da qualche parte per rifare automaticamente la connessione Db?
Soluzione
Ecco una soluzione:
https://boxpanel.blueboxgrp.com/public/the_vault /index.php/Mongrel_/_MySQL_Timeout
I timeout sulla soluzione sopra sembrano un po 'alti per me. Non si desidera che i timeout del DB siano troppo bassi, a causa della quantità di memoria che una connessione può utilizzare. Se una connessione è orfana, si desidera che scada in modo ragionevole (come non tra una settimana.)
Altri suggerimenti
In altri posti, ho anche ricevuto i seguenti suggerimenti:
-
Prova a impostare config.active_record.verification_timeout su qualcosa di più basso di qualunque cosa l'impostazione di timeout della connessione mysql è.
-
C'è un gioiello per aggirare questo problema: mysql_retry_lost_connection
http://rubyforge.org/projects/zventstools/ "Reconnect to the MySQL server when you hit a lost connection error".