SinatraとActiveRecordでこの単純なAPIによって接続が自動的に再利用されていないことが判明したとき、私はこれを試していました。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は、加入者または404 Iは、加入者のGET最初の5回のいずれかを返します。 6回目はタイムアウトになります。最初の5つのGETのそれぞれの後に、newsletter.db
のために開いているもう1つの読み取り+書き込みファイル記述子があります。私はいつも1つしかないと思っています。
ActiveRecordに接続を再利用するように指示する方法を教えてください。
この回答を見るhttp://stackoverflow.com/questions/10191531/activerecord-connection-warning-database-connections-will-not-be-closed-automa?rq=1 –
その回答を見ると、私は 'ActiveRecord :: Base.clear_active_connections! 'という呼出しが私のために働くことに気付きました。 'ActiveRecord :: Base.connection.close'を試してみたところ、接続プールに接続を返すのではなく、接続を閉じたことがわかりました。私は 'config.ru'アプローチを試しませんでした。 – mrrusof