2012-06-13 13 views
5

मैं रेल 3.2.5 और कोआला 1.3.0 का उपयोग कर रहा हूं (नवीनतम नहीं, क्योंकि नवीनतम हीरोोक से नमूना फेसबुक ऐप चलाने के लिए मना कर दिया गया है)। वेब सर्वर यूनिकॉर्न है।कोला में फेसबुक ग्राफ में put_connections() को बहुत देर से देरी के बाद विफल रहता है

जब मैं put_connections() का उपयोग कर समय के लिए पोस्ट करने की कोशिश:

Completed 500 Internal Server Error in 12075ms 

Koala::Facebook::APIError (HTTP 500: Response body: {"error":{"type":"Exception","message":"Could not retrieve data from URL.","code":1660002}}): 

मैं डिबग उपकरण के साथ परीक्षण किया: एक अपवाद हो रही से पहले

@fbgraph = Koala::Facebook::API.new(session[:access_token]) 
logger.debug "put_connections(#{url_for @room}), start" 
@fbgraph.put_connections("me", "myapp:view", :room => url_for(@room)) 
logger.debug "put_connections(), end" 

नियंत्रक स्टालों 12s के लिए http://developers.facebook.com/tools/debug और इसे लाइन 2 में लॉग इन यूआरएल के लिए कोई त्रुटि नहीं मिली।

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

मैं अपने ऐप के परीक्षण उपयोगकर्ताओं FYI पर इसका परीक्षण कर रहा हूं।

अद्यतन

यह एक OpenGraph मुद्दा हो रहा है। यह समस्या मेरे लिए पुन: उत्पन्न करती है: https://developers.facebook.com/bugs/213733412077729

मूल रूप से पोस्ट केवल एक बार डीबगर पर परीक्षण करने के बाद ही सफल होता है! किसी ने पहले इसका अनुभव किया?

उत्तर

12

यह पता लगाया। बेशक डीबगर चीज समझ में नहीं आता है। यह काम करता है क्योंकि फेसबुक के बाद उनके कैश पर मेरा विचार है।

यह एक क्लासिक पुनर्वित्त समस्या है (जिसे मैं विश्वास नहीं कर सकता कि मुझे रेल में सौदा करना है!) - फेसबुक का पोस्ट एपीआई तुल्यकालिक है और यह मेरे शो नियंत्रक को वापस कॉल करने के बाद ही लौटाता है। लेकिन चूंकि मेरे पास केवल 1 कार्यकर्ता धागा है, इसलिए कोई भी अनुरोध की सेवा नहीं कर रहा है, इस प्रकार लटका है।

फिक्स को एडीआई को अतुल्यकालिक रूप से थ्रेड में आमंत्रित करना है।

Thread.new { 
    @fbgraph.put_connections("me", "myapp:view", :room => url_for(@room)) 
} 
+4

धन्यवाद stackoverflow में मेरे क्यू/A देखो, यह मुझे सुराग मैं भी मेरी समस्या को ठीक करने के लिए आवश्यक दे दी है। मुझे लगता है कि मूल कारण यह है कि आपके नियंत्रक में सिंक्रोनस बाहरी सेवा कॉल करना 'खराब' है। 'तकनीकी रूप से अधिक सही' आर्किटेक्चर यह है कि आपकी कार्रवाई कुछ प्रकार की पृष्ठभूमि नौकरी (देरी हुई नौकरी, रेज, इत्यादि) जमा करे और अपने नियंत्रक को अवरुद्ध न करें। –

1

मैं आप के रूप में एक ऐसी ही समस्या है, लेकिन एक बात अनुरोध है कि अमेरिकन प्लान के लिए (कुल समय के साथ> -16) 600 से अधिक कॉल का प्रबंधन के साथ।

स्पष्ट रूप से खेतों में घोषणा करता है कि काम करता है।

graph = @FBGraph.get_object("#{user.fb_user_id}?fields=id,name,username,picture,link") 

अधिक जानकारी के लिए HERE

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