Question

Voici un aperçu de mon application:

require 'sinatra'
require 'active_record'

ActiveRecord::Base.establish_connection(
     :adapter => "mysql", host => $DB_HOSTNAME,
     :database => $DB_NAME,:username => $DB_USERNAME,:password => $DB_PASSWORD)

class Sometable < ActiveRecord::Base
end

get '/' do
  #stuff with Sometable
end

# a lot of route handlers..

etc.

J'appelle establish_connection juste une fois - lors de l'initialisation de l'application. Je rencontrais la limite de connexion inactive 8 heures de MySQL ( serveur MySQL a disparu ) et me demande la meilleure approche pour lui.

Je suis passé par la source ActiveRecord et a constaté qu'il connexions serveur db pools. Alors, devrais-je créer idéalement une nouvelle connexion à l'intérieur toutes les demandes Web ou d'augmenter le délai d'inactivité?

Merci pour votre temps!

Était-ce utile?

La solution 4

Merci pour toutes les réponses. MYSQL_OPT_RECONNECT semble être une bonne solution. Mais je ne suis pas sûr de savoir comment faire en utilisant ActiveRecord.

Pour l'instant, je l'ai résolu en utilisant:

#prevent MySQL server has gone away by verifying connections every 30 minutes.
Thread.new { 
  loop {
    sleep(60*30);
    ActiveRecord::Base.verify_active_connections!
  }
}.priority = -10

Autres conseils

Vous pouvez augmenter la variable wait_timeout pour mysqld. Il peut être défini dans le fichier de configuration ou passé par args de ligne de commande.

Vous utilisez des connexions persistantes?

Une autre chose à essayer est d'avoir le client MySQL défini MYSQL_OPT_RECONNECT

vous rencontrez probablement le même problème que est couvert par cette autre question SO: " MySQL server has gone away » avec Ruby on Rails

J'ai eu un problème similaire soudainement commencer (dans un code C ++) lorsque mySQL a été mis à jour.

En effet, la reconnexion automatique est réglé par défaut à 0 dans la version 5.0.3 ( http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html ).

Je devais MYSQL_OPT_RECONNECT mettre dans le code « 1 ».

Note: il doit être appelé après les appels d'initialisation () mySQL et avant de faire la connexion réelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top