2011-09-06 19 views
9

में सोलर से खारिज कर दिया गया है मैं खोज के लिए सनस्पॉट-रेल का उपयोग करता हूं। ये एक रुपये की तरह दिखता है:कनेक्शन रुपेक

describe "GET search" do 
    before(:all) do 
    system("rake", "sunspot:solr:start") 
    end 

    after(:all) do 
    system("rake", "sunspot:solr:stop") 
    end 

    it "should do some search" do 
    Text.search do 
     ... 
    end 
    end 
end 

लेकिन यह काम नहीं करता है। मैं एक विफलता है:

Errno::ECONNREFUSED: 
    Connection refused - connect(2) 

लेकिन अगर मैं कमांड लाइन में हाथ से rake sunspot:solr:start RAILS_ENV=test लिखें और फिर कल्पना चलाने के लिए, यह गुजरता है।

क्या गलत है? परीक्षण मोड में system("rake", "sunspot:solr:start") के समतुल्य rake sunspot:solr:start RAILS_ENV=test नहीं है?

(मैंने कोशिश की `प्रणाली (" रेक "," सूर्यकलंक: Solr: शुरू RAILS_EVN = परीक्षण ") एक ही।।)

उत्तर

14

आपका before(:all) शायद बस शुरू करने के लिए पर्याप्त समय नहीं दे रहा है।

यह कहा गया है कि आप शायद अपने चश्मा को यहां सत्यापित करने के लिए कह रहे हैं, इसके बारे में कड़ी मेहनत करना चाहेंगे। आप फ़ेकवेब जैसी लाइब्रेरी के साथ सोलर को कॉल का मज़ाक उड़ाते हुए एक लंबा सफर तय कर सकते हैं।

पिवॉटल लैब्स में sunspot_matchers नामक लाइब्रेरी भी है जो आपके द्वारा आमंत्रित की जा रही खोजों के बारे में अधिक बढ़िया दावे को पकड़ सकती है।

यदि आप सोलर के खिलाफ वास्तविक एकीकरण चश्मे के लिए जा रहे हैं, तो मैं सलाह देता हूं कि आप काम करते समय एक परीक्षण सौर चलाना जारी रखें। Foreman जैसे टूल आपकी सौर प्रक्रियाओं को प्रबंधित करने में सहायता कर सकते हैं। मैं एक Procfile की तरह इस्तेमाल कर सकते हैं निम्नलिखित:

solr_dev: rake sunspot:solr:run RAILS_ENV=development 
solr_test: rake sunspot:solr:run RAILS_ENV=test 

(विकास निश्चित रूप से, है, डिफ़ॉल्ट वातावरण अगर कोई RAILS_ENV अन्यथा foreman start प्रदान की जाती है)

अंत में, आप अपने चश्मा भीतर Solr शुरू करने के लिए चाहते हैं, तो , आप पहले से ही सही रास्ते पर हैं। अपने चश्मे चलने से पहले सोलर को पूरी तरह बूट करने दें ताकि पर्याप्त समय के साथ sleep को टॉस करें। आश्चर्यचकित न हों अगर सिस्टम लोड होने पर आपके स्पेक सूट में कुछ अप्रत्याशित विफलता पेश करता है।

[संपादित करें:। त्वरित और गंदे before :all जो Sunspot.remove_all का उपयोग करता उपलब्धता के लिए मतदान पर]

before :all do 
    `sunspot-solr start` 
    begin 
    Sunspot.remove_all! 
    rescue Errno::ECONNREFUSED 
    sleep 1 && retry 
    end 
end 
+0

धन्यवाद। बीटीडब्लू, मैं कैसे जान सकता हूं कि मेरे स्पेक में सोलर चल रहा है या नहीं? मैं 'कनेक्शन अस्वीकार' के बजाय एक और उचित कस्टम अपवाद चाहता हूं –

+0

मुझे यह सोचना चाहिए कि 'एरर्नो :: ECONNREFUSED' काफी संकेतक है। वास्तव में, आप उपलब्धता के लिए मतदान के लिए इसका उपयोग कर सकते हैं। बस एक संपादन में हैक किया। –

+0

महान समाधान। मेरे लिए एक सपने की तरह काम किया। – nfriend21

0

यह एक जंगली गधा अनुमान है, लेकिन मुझे यकीन है कि आप एक Solr सर्वर कॉन्फ़िगर किया है अपने config/वातावरण/development.rb में फ़ाइल किसी दिए गए बंदरगाह पर स्थानीय रूप से देखने के लिए, लेकिन अपने config/वातावरण/test.rb में ऐसी कोई विन्यास

यह डिफ़ॉल्ट पता करने के लिए कनेक्ट करने के लिए खड़ी कर रहा है/पोर्ट जहां आप वास्तव में नहीं करते हैं जब आप अपने परीक्षण निष्पादित करते हैं तो एक सोलर सर्वर चल रहा है।

मुझे यह सुनिश्चित करने के लिए रूबी में सोलर क्लाइंट के बारे में पर्याप्त जानकारी नहीं है, लेकिन चूंकि किसी और ने वजन कम नहीं किया है, इसलिए मुझे उम्मीद है कि यह आपको सही दिशा में इंगित करेगा।

11

sunspot_test gem आपके लिए यह कार्य और RSpec का समर्थन करता है जाएगा।

+0

बहुत बढ़िया, यह निश्चित रूप से सही जवाब है! – Matthew

+0

निश्चित रूप से एक सुरुचिपूर्ण उत्तर और मणि - धन्यवाद। –

0

मैं यह सिर्फ

`rake sunspot:solr:start RAILS_ENV=test` 

जोड़कर काम कर spec_helper.rb को

संपादित मिल गया: मैं https://github.com/collectiveidea/sunspot_test के साथ जा रहा Simmo की तरह उल्लेख समाप्त हो गया। यह कुछ कारणों से हर टेस्ट रन पर रेक कार्य को फिर से चला रहा था (भले ही मेरे पास स्पार्क के प्रीफर्क ब्लॉक में था)। यकीन नहीं क्यों, लेकिन sunspot_test मणि अब के लिए जाने के रास्ते की तरह लगता है।

+0

क्या यह आपके लिए रेल 3.1 पर काम करता है? –

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