Сиквел + Синатра + Phusion Passenger + MySQL Connection Management - PullRequest
1 голос
/ 10 июля 2009

Мы используем Sinatra и Sequel для небольшой реализации API. Однако проблема, с которой мы сталкиваемся, заключается в том, что при каждом запросе страницы Sequel открывает новые подключения к MySQL и сохраняет их открытыми до истечения времени ожидания или до перезапуска Apache.

Существует не так много документации о том, как повторно использовать соединения, поэтому любая помощь, объяснения и / или указатели в правильном направлении помогут.

Ответы [ 2 ]

1 голос
/ 27 июля 2009

Мы поняли, что делаем неправильно. Это было довольно глупо, мы инициализировали Sequel в фильтре before в Sinatra.

Итак, вместо этого мы делаем:

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

Тогда мы просто используем константу DB, чтобы использовать Sequel.

1 голос
/ 25 июля 2009

Я завернул материал сиквела в крошечную обертку и повторно использовал эту обертку, например:

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

В качестве альтернативы, вы можете позвонить @ con.disconnect, как только вы закончите, или вызвать Sequel.connect, используя блок:

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