续集+ Sinatra + Phusion Passenger + MySQL连接管理

时间:2009-07-09 23:20:48

标签: mysql ruby sinatra sequel

我们正在使用Sinatra和Sequel进行小型API实现。然而,我们遇到的问题是,在每个页面请求时,Sequel会打开与MySQL的新连接,并在它们超时之前保持打开状态,或者重新启动Apache。

关于如何重用连接的文档并不多,因此任何正确方向的帮助,解释和/或指示都会有所帮助。

2 个答案:

答案 0 :(得分:1)

我将Sequel的东西包装在一个小包装中并重复使用这个包装器,如下所示:

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 

答案 1 :(得分:1)

我们弄清楚我们做错了什么。这是相当愚蠢的,我们在Sinatra的过滤器中初始化了Sequel。

所以我们这样做:

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

然后我们只使用DB常量来使用续集。