Je reçois cette erreur:
ActiveRecord::Base.establish_connection ({ :adapter => 'mysql2', :database => 'ck', :host => 'localhost', :username => 'root', :password => '', :pool => 16, })
4 Réponses :
On dirait que vous ne retournez pas les connexions à la piscine à la fin de la demande. Sinon, chaque demande que chaque demande utilise la base de données consomme 1 connexion et, éventuellement, vous allez épuiser la piscine et commencerez à obtenir les messages d'erreur que vous décrivez
Active Record fournit un middleware de rack pour gérer ce Vous pouvez également prendre soin de la gestion de la connexion vous-même. Docs Avoir plus de détails mais une façon de le faire consiste à coller tous Votre DB Accède dans un bloc comme celui-ci p> qui vérifie une connexion au début du bloc et vérifie-t-elle ensuite. p> p> activerecord :: CoDraDapters :: ConnectionManagement Code>, qui devrait s'occuper des choses aussi longtemps que celles-ci dans la chaîne middleware que tout ce qui accédera à un enregistrement actif. P>
Merci. Devrais-je appeler cela avant Activerecord :: base.establish_connection?
C'est la première chose que j'appelle dans mon script, mais j'ai toujours la même erreur :(
Qu'entendez-vous par «l'appelant»? L'ajoutez-vous à la pile middleware? (Les Documents Sinatra ont des exemples IIRC)
Comme Frederick a souligné que vous devez renvoyer des connexions ouvertes ActiveRecord sur le pool de connexion.
Si vous utilisez le serveur mince, en mode fileté, vous devez ajouter ceci à votre application SINATRA: p>
after do ActiveRecord::Base.connection.close end
@squixy - Mettez ceci dans n'importe quelle classe de votre application s'étend sinatra :: base code>
Y a-t-il une raison pour laquelle vous utilisez activerecord :: base.connection.close code> au lieu de
activeCord :: base.clear_active_connections! Code> comme spécifié dans le Docs ? Est-ce simplement obsolète?
Il est préférable d'utiliser Middleware fourni avec ActiveRecord:
use ActiveRecord::ConnectionAdapters::ConnectionManagement
Comme Frederick a souligné que vous devez renvoyer des connexions ouvertes ActionCord sur le pool de connexion.
Comme Kuwerty suggère, lorsque vous utilisez mince, pour ceux qui veulent reproduire le problème, essayez Cet exemple . P> EDIT: P> J'ai expliqué pourquoi utiliser Middleware ConnectionManagement code> ne retournera pas les connexions à la piscine. Je suggère qu'au lieu de fermer la connexion actuelle comme Kuwerty, vous retournez la connexion à la piscine comme. P>
ActiveRecord :: Connectadadapters :: ConnectionManagement Code> ne fonctionnera pas avec mince en mode fileté, que vous pouvez trouver ici . p> p>