मैं सिनात्रा और एक्टिव रिकार्ड के साथ खेल रहा था जब मुझे पता चला कि इस सरल एपीआई द्वारा कनेक्शन का पुन: उपयोग नहीं किया जाता है।मैं 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!
एपीआई रिटर्न या तो एक ग्राहक या एक 404 पहले 5 बार मैं एक ग्राहक प्राप्त करें। 6 वें बार मुझे टाइमआउट मिलता है। पहले 5 जीईटी में से प्रत्येक के बाद, newsletter.db
के लिए एक और पढ़ें + लिखें फ़ाइल डिस्क्रिप्टर खुला है। मैं उम्मीद करता हूं कि हर समय केवल एक ही रहें।
मैं 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