2012-03-04 5 views
9

में कैपिबरा से चलने पर वेबकिट_सर्वर समय-समय पर लटकता है मुझे एक समस्या है जहां एक यूपी जाने पर स्थानीय Xvfb स्क्रीन से जुड़े हेडलेस कैपिबरा और कैपिबरा-वेबकिट के साथ वेबकिट_सेवर का एक उदाहरण है। यह कई बार बार-बार विभिन्न यूआरएल और खोजकर्ताओं को निष्पादित करने के बाद होता है। (मैं वेनिला रूबी में एक स्क्रीन स्क्रैपिंग एप्लिकेशन के लिए कैपिबरा का उपयोग कर रहा हूं, परीक्षण के लिए नहीं।)रूबी

मैंने पुष्टि की है कि जब यह साइट लटकती है तब भी पहुंच योग्य है (उदाहरण के लिए, कमांड लाइन पर कर्ल या wget के माध्यम से) । मैंने रुबी कोड को लपेटने का भी प्रयास किया है जो टाइमआउट ब्लॉक में विज़िट और बाद के खोजकर्ताओं को आमंत्रित करता है ताकि 60 सेकंड के इंतजार के बाद एक नया यूआरएल देखा जा सके, लेकिन पहली बार ऐसा होने पर कोई भी विज़िट() प्रयास विफल हो जाता है। समस्या को ठीक करने का एकमात्र तरीका है कि रूबी प्रक्रिया दोनों को कैपिबारा/कैपिबरा-वेबकिट और वेबकिट_सेवर प्रक्रिया का आह्वान करना और पुनरारंभ करना है।

जब मैं webkit_server प्रक्रिया strace, मैं इस बार बार की तरह उत्पादन देखें:

clock_gettime(CLOCK_MONOTONIC, {5821, 680279627}) = 0 
gettimeofday({1330890176, 712033}, {0, 33052112}) = 0 
gettimeofday({1330890176, 712087}, {0, 140736435864256}) = 0 
gettimeofday({1330890176, 712137}, {0, 33108640}) = 0 
clock_gettime(CLOCK_MONOTONIC, {5821, 680486036}) = 0 
clock_gettime(CLOCK_MONOTONIC, {5821, 680530091}) = 0 
read(7, 0x1fac1b4, 4096)    = -1 EAGAIN (Resource temporarily unavailable) 

और अगर मैं रूबी प्रक्रिया है कि यह आह्वान strace, यह एक पढ़ने() पर लटका दिया जाता है:

Process 3331 attached - interrupt to quit 
read(5, 
^C <unfinished ...> 
Process 3331 detached 

मुझे पता है कि रूबी कोड Capybara विज़िट() विधि पर लटका हुआ है।

समस्या निवारण या सही करने के लिए मैं क्या कर सकता हूं, इस पर कोई विचार है। मुझे लगता है कि समस्या कुछ संसाधन वेबकिट_सेवर के साथ कुछ करने के लिए है, यूआरएल पर जाने की जरूरत है, लेकिन मुझे यकीन नहीं है कि आगे क्या प्रयास करना है।

धन्यवाद!

+0

इसके अलावा, क्या यह लायक है के लिए, मैं webkit_debug Capybara चालक उपयोग करने की कोशिश और Capybara के स्वयं लॉगिंग नहीं कर देते। डिबग आउटपुट से पिछले पंक्तियां हैं: >> जाएँ >> 1 >> 109 >> http: // [साइट यूआरएल] मैं कब्जा स्क्रीन करने के लिए XWD का उपयोग कर कर की कोशिश की है क्या इस बिंदु पर क्या हो रहा है : xwd -root -display: 1 | xwdtopnm | pnmtopng> screenshot.png लेकिन मुझे केवल एक काला आयताकार मिलता है। –

उत्तर

1

मैंने यह समस्या देखी है जब Capybara सर्वर चलाने के लिए Webrick का उपयोग कर रहा है। अपने Gemfile & पर "मणि 'पतली' जोड़ें 'यह स्वचालित रूप से इसके बजाय इसका उपयोग करेगा। देखें कि क्या मदद करता है?

+0

धन्यवाद। दुर्भाग्य से मुझे webkit_server का उपयोग करना है, इसलिए मुझे नहीं लगता कि पतली इस विशेष मामले में मदद करेगी। हालांकि यह अन्य सर्वरों के साथ मदद कर सकता है। –

+2

शायद मैं गलत हूं, लेकिन मैंने सोचा कि webkit_server सिर्फ एक हेडलेस ब्राउज़र था। Capybara अभी भी पतला/Webrick/ब्राउज़र जो भी बात करने के लिए कुछ देने के लिए चल रहा है, है ना? –

+0

मैंने पाया कि मुझे पतली हैंडलर को स्पष्ट रूप से जोड़ना था, जैसा कि ग्रिमो ने किया था। – Empact

2

मुझे पता चला है कि इस समस्या को ठीक करने के लिए त्रुटि के बाद Capybara.reset_sessions! पर कॉल किया गया है। मुझे यकीन नहीं है क्यों, लेकिन मुझे तब से समस्या नहीं हुई है।

+1

क्या आप कृपया स्पष्टीकरण दे सकते हैं कि आप reset_sessions कहां जोड़ते हैं?क्या यह बाद में हुक में है? त्रुटि की घटना पर आप इसकी आविष्कार कैसे करते हैं? –

13

capybara-webkit 1.0 यादृच्छिक रूप से मेरे लिए पूरे सूट पर भी लटकता है।

बस 'पतली' जोड़ना पर्याप्त नहीं था। लेकिन पतले हैंडलर के स्पष्ट उपयोग ने काम किया। env.rb को जोड़ा गया:

Capybara.server do |app, port| 
    require 'rack/handler/thin' 
    Rack::Handler::Thin.run(app, :Port => port) 
end 

नोट पतला उपयोग चेतावनी: https://github.com/thoughtbot/capybara-webkit/issues/399#issuecomment-22328028

+3

अगर मैं आपको 1000 अपवॉट दे सकता हूं तो मैं इसे करूँगा। सब कुछ करने की कोशिश करने के कुछ घंटों के बाद, यह बना दिया। आप जोड़कर शुरुआत में कष्टप्रद पतला लॉगिंग भी अक्षम कर सकते हैं: 'Thin :: Logging.silent = true' – yagooar

+0

इस पर मेरे जीवन के 8 घंटे बर्बाद हो गए। सर उठाने के लिए धन्यवाद! – stuartchaney