当我使用Sinatra和ActiveRecord时,我发现这个简单的API不会自动重用连接。
#!/usr/bin/env ruby
require 'sinatra'
require 'active_record'
ActiveRecord::Base.establish_connection(
adapter: 'sqlite3',
database: 'newsletter.db'
)
ActiveRecord::Schema.define do
create_table :subscribers do |t|
t.string :email
t.timestamps
end
end
class Subscriber < ActiveRecord::Base
validates :email, presence: true
end
class Newsletter < Sinatra::Base
set :server, :thin
get '/subscribers/:email' do
s = Subscriber.find_by_email(params[:email])
if s == nil
status 404
else
content_type 'application/json'
s.to_json
end
end
post '/subscribers/:email' do
Subscriber.create(email: params[:email])
end
end
Newsletter.run!
API会在我第一次GET订阅者时返回一个订阅者或404。前五次获取订阅者时,每次都会打开一个新的读写文件描述符
newsletter.db
。第六次请求则超时。我希望始终只有一个读写文件描述符打开。如何告诉ActiveRecord重用连接?
ActiveRecord::Base.clear_active_connections!
对我有用。 我确实尝试了ActiveRecord::Base.connection.close
,发现这种方式关闭了连接而不是将连接返回到连接池中。 我没有尝试过config.ru
的方法。 - mrrusof