我们将 Sinatra 和 Sequel 用于小型 API 实现。然而,我们遇到的问题是,在每个页面请求上,Sequel 都会打开与 MySQL 的新连接,并让它们保持打开状态,直到它们超时,或者您重新启动 Apache。
关于如何重用连接的文档并不多,因此任何帮助、解释和/或正确方向的指示都会有所帮助。
我将 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
我们发现我们做错了什么。这是相当愚蠢的,我们在 Sinatra 的前置过滤器中初始化了 Sequel。
所以我们这样做:
DB = Sequel.mysql("...")
然后我们简单地使用DB
常量来使用Sequel。