2015-11-20 7 views
5

मैं Node.js, Express.js, Bookshelf.js और Knex.jsKnex: त्रुटि pool2 - त्रुटि: कनेक्ट ECONNREFUSED

मैं डिफ़ॉल्ट Knex पूल परिभाषा के साथ त्रुटि निम्न हो रही है के साथ काम कर रहा हूँ।

Knex:Error Pool2 - Error: connect ECONNREFUSED 

Knex परिभाषा (डिफ़ॉल्ट pool.min मान 2 है)

var knex = require('knex')({ 
      client: 'mysql', 
      connection: config.connection, 
}); 

निम्नलिखित के साथ है यही कारण है कि मैं त्रुटि

Knex:Error Pool2 - Error: connect ECONNREFUSED 
Knex:Error Pool2 - Error: connect ECONNREFUSED 

कहाँ के रूप में यह परिभाषा निम्नलिखित के साथ ठीक काम करता है मिलता है।

var knex = require('knex')({ 
      client: 'mysql', 
      connection: config.connection, 
      pool: { 
        min: 0, 
        max: 10 
      } 
}); 

मैंने देखा है कि त्रुटि समय की n संख्या जहां n pool.min मूल्य में छापा जाता है।

क्या कोई मुझे बता सकता है कि यह क्यों हो रहा है। हालांकि, त्रुटि हल हो गई है, लेकिन जब से मैं नौसिखिया हूं, मैं समझ नहीं पा रहा हूं कि यह क्यों हो रहा है।

उत्तर

4

ECONNREFUSED कनेक्ट() सिस्टम कॉल द्वारा वापस किया जाता है जब रिमोट सिस्टम या सेवा या तो निर्दिष्ट बंदरगाह पर नहीं सुनती है या आपके बीच फ़ायरवॉल ऐसा दिखाई दे रहा है।

असल में, knex डेटाबेस सर्वर से कनेक्ट करने में असमर्थ है। पूल.मिन के साथ आपको त्रुटि क्यों नहीं मिलती है 0 कारण है क्योंकि पूल 2 लाइब्रेरी शून्य सक्रिय कनेक्शन से संतुष्ट है और डेटाबेस से कनेक्ट करने का प्रयास नहीं करेगा जब तक कि कनेक्शन को कनेक्शन न हो।


का पालन करने के लिए, Knex लोगों don'tthis लागू करने के लिए care लगते हैं। इसके अलावा, यह मुद्दा यह प्रतीत होता है कि पूल 2 ऑब्जेक्ट को नष्ट कर दिया जाता है जब स्टार्टअप और ईएक्सएक्स पर ECONNREFUSED का सामना करना पड़ता है, बस इससे ठीक नहीं हो पाता है।

कहा जा रहा है कि समस्या केवल स्टार्टअप पर मेरे लिए होती है। यदि डेटाबेस नीचे/बाद/पूल स्थापित हो जाता है, तो knex बैक अप आने तक कनेक्ट करने का प्रयास करेगा। या तो knex या mysql क्लाइंट लाइब्रेरी में कुछ रीकनेक्ट केस को ठीक से संभालता है, भले ही ECONNREFUSED वापस आ जाए। के बाद मैं Knex वस्तु बनाने मैं इस immediatey कर

setTimeout(function() { 
    knex.raw('SELECT 1').catch(function (error) { 
     log.fatal('caught exception trying to issue database keep-alive'); 

     // do something fatal, like exit or cluster.worker.disconnect() 
    }); 
}, 0); 

: इसे ध्यान में रखते, मैं क्या कर रहा करने के लिए लिया है यह है। तेजी से विफल यह मेरे लिए काम करता है, लेकिन वाईएमएमवी।

+1

मुझे समझा। हालांकि pool.min 0 मेरी आवश्यकता को पूरा करता है, लेकिन क्या यह तरीका है कि यह pool.min> 0 के साथ काम कर सकता है? – Rusty

+0

मैंने उस कामकाज को जोड़ा जो मैं कुछ सफलता के साथ उपयोग कर रहा हूं। यह सही नहीं है - असल में, मुझे यह घृणित लगता है - लेकिन यह काम करता है। – diz

1

diz कहते हैं, कि त्रुटि आप देख जब Knex डेटाबेस से कनेक्ट नहीं कर सकता है। जब मुझे यह त्रुटि मिल रही थी, तो ऐसा इसलिए था क्योंकि मेरे पास MySQL सर्वर पर मेरे लोकहोस्ट (कनेक्शन 'ऑब्जेक्ट में' होस्ट ') पर चल रहा था, जिस पर कनेक्शन के' डेटाबेस 'कुंजी में निर्दिष्ट नाम के साथ डेटाबेस था वस्तु। मैंने MySQL को निकाल दिया और खाली डेटाबेस बनाया और सबकुछ वहां से बहुत अच्छा था।

MySQL आवश्यक कदम से पहले इस चलाता है: ये कदम उठाएँ मैं मेरे साथी devs के लिए बाहर लिखा हैं

  1. mysql।सर्वर प्रारंभ

  2. mysql -u जड़

  3. उपयोगकर्ता बनाने 'our_user' @ 'localhost' द्वारा 'our_password' पहचान की

  4. डाटाबेस डीबीनाम बनाएं;

  5. सभी को dbname पर अनुदान दें। * TO 'our_user' @ 'localhost';

+0

हां, मुझे समस्या समझा। तुम सही हो। लेकिन मैं अभी भी पूल से अधिक रन नहीं कर पा रहा हूं। 0 से अधिक। हालांकि, मुझे इसे अभी तक रखने की आवश्यकता नहीं है, लेकिन अभी भी यह जानना है कि कोई रास्ता है या नहीं। – Rusty

+0

स्रोत: http://blogs.candoerz.com/question/182128/knexerror-pool2-error-connect-econnrefused.aspx –

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