मेरे पास एनजीआईएनएक्स और प्यूमा के साथ होस्ट किए गए रेल ऐप हैं। हर 10 घंटे या तो, ऐप अनुपयोगी हो जाता है। जब भी कोई उपयोगकर्ता कनेक्ट करने का प्रयास करता है, तो निम्न त्रुटि संदेश प्रदर्शित होता है:रेल 4 डेटाबेस कनेक्शन पूल त्रुटि
Error during failsafe response: could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)
यह तब तक जारी रहता है जब तक ऐप पुनरारंभ नहीं होता है।
मैंने पढ़ा है कि ऐसा इसलिए है क्योंकि डेटाबेस कनेक्शन पूल भरा हुआ है, और ऐसे में रेल ऐप में थ्रेड बनाए जा रहे हैं जो समाप्त होने पर डेटाबेस से उनके कनेक्शन को बंद नहीं कर रहे हैं। मेरे ज्ञान के लिए, ऐप कोड में केवल एक ही स्थान है जहां धागे का उपयोग किया जाता है: एक ब्लॉक रूबी टाइमआउट मॉड्यूल का उपयोग करता है, लेकिन यह डेटाबेस तक नहीं पहुंचता है।
के बाद इस गाइड https://devcenter.heroku.com/articles/concurrency-and-database-connections (मैं वास्तव में Heroku उपयोग नहीं कर रहा) मैं निम्नलिखित कॉन्फ़िग फ़ाइल के साथ करने के लिए 5 डेटाबेस कनेक्शन पूल के आकार निर्धारित किया है,:
#config/initializers/database_connection.rb
Rails.application.config.after_initialize do
ActiveRecord::Base.connection_pool.disconnect!
ActiveSupport.on_load(:active_record) do
config = ActiveRecord::Base.configurations[Rails.env] ||
Rails.application.config.database_configuration[Rails.env]
config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
config['pool'] = ENV['MAX_THREADS'] || 5
ActiveRecord::Base.establish_connection(config)
end
अंत
साइट रेल 4.0.0 का उपयोग कर होस्ट किया गया है। मैंने पढ़ा है कि यह वास्तव में एक रेल 4.0.0 समस्या हो सकता है, और यह बाद के संस्करणों में तय किया गया था, लेकिन मुझे इस बारे में अनिश्चितता है। ConnectionTimeoutError on Heroku with Postgres
- वहाँ कनेक्शन पूल में सक्रिय डेटाबेस कनेक्शन की संख्या पर नजर रखने के कोई तरीका है? यह डीबगिंग को अधिक आसान बना देगा।
- इस समस्या के कारण रेल ऐप कोड के भीतर टाइमआउट मॉड्यूल का उपयोग कर रहा है?
- क्या यह मेरे ऐप के साथ किसी समस्या की बजाय रेल 4.0.0 समस्या होने की संभावना है?
रेल ऐप उत्पादन वातावरण में चल रहा है। यदि आवश्यक हो तो मैं अपने प्यूमा, एनजीआईएनएक्स कॉन्फ़िगरेशन पर अधिक जानकारी दे सकता हूं।
मैं इनमें से एक टन भी 4.1 ऐप पर देख रहा हूं, जिसे मैंने कभी भी 3.x पर नहीं देखा, इसलिए मुझे लगता है कि समस्या वास्तव में तय नहीं हुई थी। – riffraff
कोई भी इसके लिए एक फिक्स पाता है? मैं भी यह देख रहा हूँ। मेरे पास 'airbrake' मणि और/या 'application_controller.rb' में' current_user' का उपयोग करके एक जुड़ाव है। किसी और को एयरब्रैक मणि का उपयोग करके या application_controller.rb में current_user का उपयोग करके यह त्रुटि है? – Catfish
मेरे विकास सर्वर को Webrick पर स्विच करके मुझे यह त्रुटि दिखाई नहीं दे रही है। मैं सोच रहा हूँ कि अपराधी प्यूमा है। – Catfish