2012-04-17 12 views
9

मैं सिनात्रा और ActiveRecord (3.2.3) के साथ एक छोटा सा ऐप बनाने की कोशिश कर रहा हूं।ActiveRecord कनेक्शन चेतावनी। (डेटाबेस कनेक्शन स्वचालित रूप से बंद नहीं होंगे)

यह कैसे अपने मुख्य फ़ाइल की तरह लग रहा है:

require "sinatra" 
require "sinatra/reloader" 
require "active_record" 
... 

ActiveRecord::Base.establish_connection(
    adapter: 'sqlite3', 
    database: 'db.sqlite3', 
    host:  'localhost', 
) 

class Post < ActiveRecord::Base 
    ... 
end 

get('/') { ... } 
get('/posts') { ... } 
... 

यह काम करता है, लेकिन कभी कभी मैं कंसोल में एक चेतावनी मिलती है:

अस्वीकार्यता चेतावनी: डेटाबेस कनेक्शन अपने आप बंद नहीं किया जाएगा, अपने कनेक्शन पर close पर कॉल करके धागे के अंत में अपने डेटाबेस कनेक्शन को बंद करें। उदाहरण के लिए: ActiveRecord :: Base.connection.close '

जब चेतावनी होती है यह एक लंबे समय से पहले पृष्ठ रीफ्रेश लेता है। मुझे समझ में नहीं आता कि मुझे कनेक्शन बंद करना चाहिए। मैंने फ़ाइल के नीचे ActiveRecord::Base.connection.close डालने का प्रयास किया है, लेकिन इससे मदद नहीं मिलती है।

अद्यतन:

मुझे लगता है कि मैं भी sinatra-contrib मणि से सिनात्रा/reloader प्लगइन का उपयोग सर्वर को पुन: प्रारंभ बिना प्रभाव को देखने के लिए उल्लेख करना भूल गया।

require "sinatra/reloader" 

यदि मैं इसे टिप्पणी करता हूं तो समस्या गायब हो जाती है। लेकिन वैसे भी, मैं सोच रहा हूं कि रीलोडर को अक्षम किए बिना समस्या से कैसे छुटकारा पाना है।

उत्तर

13

आपको अपने ढेर में एक मिडलवेयर जोड़ने की जरूरत है।

use ActiveRecord::ConnectionAdapters::ConnectionManagement 

जवाब यहाँ मिल गया:: https://github.com/puma/puma/issues/59

+0

बहुत बढ़िया। धन्यवाद –

13

स्वीकार किए जाते हैं जवाब पतला (पिरोया मोड) पर सिनात्रा में मेरे लिए काम नहीं किया बस रैक अप फ़ाइल अपने config.ru में यह पंक्ति जोड़। इसके बजाय मैं प्रयोग किया है: मेरे लिए

after do 
    ActiveRecord::Base.connection.close 
end 
+0

मुझे यह भी मेरे लिए सच साबित हुआ। किसी को पता है कि यह मामला क्यों है? उन लोगों के लिए जो इसे काम करने के लिए मिला, आप सर्वर के लिए क्या उपयोग कर रहे थे? – PICyourBrain

+0

मैंने कोशिश की लेकिन अभी भी मेरे लिए काम नहीं कर रहा है। – jamesfzhang

+0

यह उत्तर प्यूमा पर चल रहे 10 के डीबी_पूल के साथ एक सिनात्रा एप्लिकेशन पर काम करता था। –

1
ActiveRecord::Base.remove_connection 

वर्क्स ठीक है और डॉक्स में सूचीबद्ध है।

+0

दस्तावेज़ों में कहां? उन्हें इस कोड का उपयोग कहां करना चाहिए? – Adam

+1

स्टैक ओवरव्लो में आपका स्वागत है! यह एक उत्तर के रूप में योग्य नहीं है और शायद एक टिप्पणी होना चाहिए। –

+0

@Adam http://www.rubydoc.info/gems/activerecord/5.1.0/ActiveRecord/ConnectionHandling#remove_connection-instance_method - डेटाबेस को अब आवश्यक होने पर विधि कहा जाना चाहिए। – ryu

संबंधित मुद्दे

 संबंधित मुद्दे