【发布时间】:2016-08-10 09:50:01
【问题描述】:
当我发现这个简单的 API 不会自动重用连接时,我正在使用 Sinatra 和 ActiveRecord。
#!/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 在我获得订阅者的前 5 次返回订阅者或 404。我第 6 次超时。在前 5 个 GET 中的每一个之后,还有一个为 newsletter.db 打开的读写文件描述符。我希望一直只有一个。
我如何告诉 ActiveRecord 重用连接?
【问题讨论】:
-
通过查看该答案,我最终发现调用
ActiveRecord::Base.clear_active_connections!对我有用。我确实尝试了ActiveRecord::Base.connection.close,发现这样我关闭了连接,而不是将连接返回到连接池。我没有尝试config.ru方法。
标签: ruby activerecord sinatra