2012-03-18 34 views
5

मेरे पास एक मानक रेल 3.2 एप है जिसमें कुछ अजीब व्यवहार चल रहा है।स्पार्क मेरे रेल ऐप में अपरिभाषित विधि त्रुटि का कारण बनता है?

मैं बिना स्पार्क चलाने के rspec spec/ चला सकता हूं और सभी परीक्षणों में कोई समस्या नहीं होती है।

फिर मैं स्पार्क को आग लगाता हूं और फिर चश्मा चलाता हूं। इस बार, हर परीक्षण है कि मेरे मेलर्स को छूता है, एक ही त्रुटि के साथ विफल हो जाएगा:

Failures: 

    1) InvitationsController GET accept with non-matching token should redirect to the root path 
    Failure/Error: let!(:invitation) { Factory :invitation } 
    NoMethodError: 
     undefined method `invite' for InvitationMailer:Class 
    # ./app/models/invitation.rb:29:in `send_email' 
    # ./spec/controllers/invitations_controller_spec.rb:5:in `block (3 levels) in <top (required)>' 

फिर, बस यह सब एक छोटे से weirder, मैं व्यक्तिगत निर्देशिका या चश्मा, के साथ या spork चल बिना चला सकते हैं बनाने के लिए, और सब कुछ कोई समस्या नहीं गुजरता है। उदाहरण rspec spec/mailers या rspec spec/models

class InvitationMailer < ActionMailer::Base 
    default from: APP_CONFIG[:default_from] 

    def invite(invitation) 
    @invitation = invitation 

    mail(to: @invitation.recipient_email, subject: "the subject") 
    end 
end 
कोई भी विचार

क्या हो रहा हो सकता:

यहाँ विधि है जो मुझे बताया जा रहा है अपरिभाषित है?

+0

@ डकफुज़, क्या आपको समाधान मिला? –

+1

नहीं। मैं जल्द ही ऐप से स्पार्क लेने की योजना बना रहा हूं। जब यह काम करता है तो मुझे स्पार्क पसंद है लेकिन मुझे लगता है कि मैं इसे ज्यादातर समय पर भरोसा नहीं कर सकता। –

+0

कारखाने और परीक्षण कोड के बिना इस प्रश्न का उत्तर देना मुश्किल है। – Wes

उत्तर

0

स्पार्क को ट्विक करने में कुछ समय बिताने के बाद, मुझे लगता है कि इसे ठीक करना संभव है।

किसी कारण से, स्पार्क InvitationMailer फ़ाइल लोड नहीं कर रहा है। तो, एक चीज जो आप कर सकते हैं उसे Spork.each_run do ब्लॉक के भीतर इसकी आवश्यकता है।

  1. Spork.prefork do ब्लॉक के अंदर करने के लिए require 'spork' के अलावा कल्पना सहायक में सब कुछ ले जाएँ:

    इसके अलावा, यहाँ प्रक्रिया मैं Spork मुद्दों का निदान करने के लिए प्रयोग किया जाता है। सुनिश्चित करें कि कोई त्रुटि नहीं है। कितनी तेजी से देखने के लिए time का उपयोग करें।

  2. कुछ कोड Spork.each_run do ब्लॉक में ले जाएं।
  3. यह देखने के लिए जांचें कि क्या त्रुटि होती है। परीक्षण चलाने में कितनी तेज़ी से चलने के लिए time का उपयोग करें।
  4. देखें कि त्रुटि होती है या नहीं। यदि ऐसा है, तो कुछ कोड वापस pre_fork पर ले जाएं।
  5. prefork ब्लॉक में क्या होना चाहिए और यह कितनी तेज़ गति से चलने की आवश्यकता है, तब तक सामान को आगे बढ़ते रहें।

इस प्रक्रिया को इस RailsCast में समझाया गया था।

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