2015-10-20 4 views
6

मैं पृष्ठ को प्रदर्शित करने के बाद दूरस्थ सेवा पर अनुरोध करने की ज़रूरतप्रस्तुत करने के बाद विधि कैसे कॉल करें?

मेरे नियंत्रक:

after_filter :remote_action, only: :update 

def update 
    @res = MyService.do_action foo, bar 
    return render json: @res[:json], status: @res[:status] unless @res[:success] 
end 

def remote_action 
    # There is remote http request 
end 

मैं पृष्ठ के बाद टेम्पलेट कर दिया गया है

+0

सुनिश्चित नहीं हैं कि क्यों आपको ऐसा करने की जरूरत है? क्या आप अधिक पृष्ठभूमि दे सकते हैं कि इसे क्यों बुलाया जाना चाहिए, न कि दौरान? आप जेएस के माध्यम से एक एपीआई कॉल कर सकते हैं जो क्लाइंट साइड पर पेज के बाद इस क्रिया को ट्रिगर करता है। – penner

+0

रिमोट सर्वर पर अनुरोध करने में कुछ समय लगता है, और मुझे पृष्ठभूमि में इस क्रिया को कॉल करने की आवश्यकता है, उदाहरण के लिए: ट्विटर एपीआई –

उत्तर

9

after_filter चलाया जाता है प्रतिपादन के बाद remote_action विधि कॉल करने की जरूरत है एचटीएमएल में परिवर्तित कर दिया है, लेकिन पहले कि एचटीएमएल ग्राहक की प्रतिक्रिया के रूप में भेजा जाता है। इसलिए, यदि आप दूरस्थ http अनुरोध करने की तरह कुछ धीमा कर रहे हैं, तो यह आपकी प्रतिक्रिया को धीमा कर देगा, क्योंकि इसे उस दूरस्थ अनुरोध को समाप्त करने की प्रतीक्षा करनी होगी: दूसरे शब्दों में, दूरस्थ अनुरोध आपकी प्रतिक्रिया को अवरुद्ध कर देगा।

अवरुद्ध से बचने के लिए, आप एक अलग धागा बंद कांटा सकता है: इस का उपयोग करते हुए

https://github.com/tra/spawnling

पर एक नजर है, तो आप सिर्फ

def remote_action 
    Spawnling.new do 
    # There is remote http request 
    end 
end 

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

आप https://github.com/collectiveidea/delayed_job पर भी देख सकते हैं, जो डेटाबेस तालिका में नौकरियां डालता है, जहां एक अलग प्रक्रिया उन्हें बाहर खींचती है और उन्हें निष्पादित करती है।

+0

के माध्यम से ट्वीट भेजना धन्यवाद! इसने काम कर दिया! –

+0

बढ़िया! मेरे उत्तर को सही के रूप में चिह्नित करने के लिए स्वतंत्र महसूस करें :) –

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