2016-11-29 4 views
5

का समय समाप्त हो मैं खुशी से पीछा कर रहा था कि मेरे फीनिक्स नियंत्रक परीक्षण के अंदर एक डिबगर को चलाने के लिए पर this advice:अमृत जिज्ञासा सत्र में विघ्न क्योंकि डेटाबेस कनेक्शन

  • लक्ष्य फ़ाइल में require IEx
  • वांछित लाइन के लिए IEx.pry जोड़ने
  • आईईएक्स के अंदर परीक्षण चलाने: iex -S mix test --trace

लेकिन कुछ ही सेकंड बाद इस त्रुटि को हमेशा दिखाई दिया: संदेश दर्शाता है

16:51:08.108 [error] Postgrex.Protocol (#PID<0.250.0>) disconnected: 
** (DBConnection.ConnectionError) owner #PID<0.384.0> timed out because 
it owned the connection for longer than 15000ms 

के रूप में, डेटाबेस कनेक्शन इस बिंदु और किसी भी आदेश दिए गए आह्वान डेटाबेस कनेक्शन एक DBConnection.OwnershipError के साथ बाहर त्रुटि होगा टाइम आउट करने के लिए प्रकट होता है। मैं अपने डेटाबेस कनेक्शन को समय-समय पर कैसे बताऊं ताकि मैं अपने परीक्षणों को शांति से डीबग कर सकूं?

उत्तर

3

Ecto.Adapters.SQL.Sandbox FAQ इस समस्या का उल्लेख करता है और बताता है कि आप :ownership_timeout सेटिंग को अपने रिपो कॉन्फ़िगरेशन में जोड़ सकते हैं ताकि यह निर्दिष्ट किया जा सके कि समय से पहले डीबी कनेक्शन कितने समय तक खुला रहना चाहिए। मैं मेरा 10 मिनट के लिए (केवल परीक्षण वातावरण) सेट तो मैं इसके बारे में फिर से सोचने के लिए कभी नहीं किया है:

# config.test.exs 

config :rumbl, Rumbl.Repo, 
    # ...other settings... 
    ownership_timeout: 10 * 60 * 1000 # long timeout so pry sessions don't break 

जैसी उम्मीद थी, मैं अब लगभग 10 मिनट के लिए pry में उस त्रुटि को देखने से पहले मूर्ख कर सकते हैं।

+0

इसके अलावा: 'ExUnit.configure (टाइमआउट:: अनंतता)' और/या 'iex -S मिश्रण परीक्षण --trace' विश्वव्यापी विकल्प हैं। – mudasobwa

+3

उस टिप के लिए धन्यवाद; मैंने 'ExUnit.configure (टाइमआउट:: अनंतता) 'का प्रयास नहीं किया, हालांकि मैं पुष्टि कर सकता हूं कि' आईईएक्स-एस मिश्रण परीक्षण --trace' * अनुरोध * टाइमआउट रोकता है लेकिन * डीबी कनेक्शन * टाइमआउट को रोकता नहीं है (देखें मैंने ऊपर दिए गए प्रश्न में किए गए कदम)। मुझे आश्चर्य है, क्या मुझे इसे एक बग के रूप में देखना चाहिए? –

+0

कोई विचार नहीं। शायद हाँ, लेकिन मुझे यकीन नहीं है। – mudasobwa

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