2009-07-09 6 views
1

Nous utilisons Sinatra et Sequel pour une petite implémentation d'API. Le problème que nous avons cependant est que sur chaque demande de page, Sequel ouvre de nouvelles connexions à MySQL, et les garde ouvertes jusqu'à leur expiration, ou vous redémarrez Apache.Sequel + Sinatra + Phusion Passenger + Gestion de connexion MySQL

Il n'y a pas beaucoup de documentation sur la façon de réutiliser les connexions, donc toute aide, explication et/ou pointeur dans la bonne direction serait utile.

+0

Où établissez-vous votre connexion? pourriez-vous poster un exemple de code? – BaroqueBobcat

Répondre

1

Nous avons compris ce que nous faisions mal. C'était plutôt stupide, nous avons initialisé Sequel dans un filtre avant à Sinatra.

Ainsi, au lieu que nous faisons:

DB = Sequel.mysql("...") 

Ensuite, nous utilisons simplement la constante DB à utiliser Sequel.

1

J'Enveloppez la substance Sequel dans un emballage minuscule et réutiliser cette enveloppe, comme ceci:

get '/api/:call' do 
    @@api ||= SApi.new 
    @@api.call(params[:call]) 
end 

class SApi 
    def initialize 
    connect 
    end 
    def connect 
    @con = Sequel.connect("...") 
    end 
    def call(x) 
    #handle call using @con 
    end 
end 

Vous pouvez également appeler @ con.disconnect une fois que vous avez terminé ou appelez Sequel.connect en utilisant un bloc :

Sequel.connect("...") do |c| 
    # work with c 
end #connection closed 
+0

Merci, mais nous avons déjà résolu ce problème d'une manière différente. J'ai juste oublié de fermer/répondre à la question * sifflets * :) – jimeh

Questions connexes