5

डाला गया था मैं एक मुद्दा है जहाँ मैं Google कैलेंडर API वी 3 करने के लिए एक insert_calendar अनुरोध भेजने में चल रहा हूँ, और मैं वापस निम्नलिखित प्रतिक्रिया मिल:Google कैलेंडर API वी 3 insert_calendar 503 दिखाए, लेकिन कैलेंडर सफलतापूर्वक

Sending HTTP post https://www.googleapis.com/calendar/v3/calendars? 

503 

#<HTTP::Message:0x000000124eb008 
    @http_header=#<HTTP::Message::Headers:0x000000124eafe0 
    @http_version="1.1", 
    @body_size=0, 
    @chunked=false, 
    @request_method="POST", 
    @request_uri=#<Addressable::URI:0x9275f20 URI:https://www.googleapis.com/calendar/v3/calendars?>, 
    @request_query=nil, 
    @request_absolute_uri=nil, 
    @status_code=503, 
    @reason_phrase="Service Unavailable", 
    @body_type=nil, 
    @body_charset=nil, 
    @body_date=nil, 
    @body_encoding=#<Encoding:UTF-8>, 
    @is_request=false, 
    @header_item=[ 
    ["Vary", "Origin"], 
    ["Vary", "X-Origin"], 
    ["Content-Type", "application/json; charset=UTF-8"], 
    ["Content-Encoding", "gzip"], 
    ["Date", "Fri, 25 Aug 2017 20:16:34 GMT"], 
    ["Expires", "Fri, 25 Aug 2017 20:16:34 GMT"], 
    ["Cache-Control", "private, max-age=0"], 
    ["X-Content-Type-Options", "nosniff"], 
    ["X-Frame-Options", "SAMEORIGIN"], 
    ["X-XSS-Protection", "1; mode=block"], 
    ["Server", "GSE"], ["Alt-Svc", "quic=\":443\"; ma=2592000; v=\"39,38,37,35\""], 
    ["Transfer-Encoding", "chunked"] 
    ], 
    @dumped=false>, 
    @peer_cert=#<OpenSSL::X509::Certificate: 
    subject=#<OpenSSL::X509::Name:0x00000012600998>, 
    issuer=#<OpenSSL::X509::Name:0x000000126009c0>, 
    serial=#<OpenSSL::BN:0x000000126009e8>, 
    not_before=2017-08-15 16:06:52 UTC, 
    not_after=2017-11-07 16:04:00 UTC 
    >, 
    @http_body=#<HTTP::Message::Body:0x000000124eaf68 
    @body="{\n \"error\": {\n \"errors\": [\n{\n \"domain\": \"global\",\n \"reason\": \"backendError\",\n \"message\": \"Backend Error\"\n }\n ],\n \"code\": 503,\n \"message\": \"Backend Error\"\n }\n}\n", 
    @size=0, 
    @positions=nil, 
    @chunk_size=nil 
    >, 
    @previous=nil> 

Caught error Server error 

Error - #<Google::Apis::ServerError: Server error> 

मैं गूगल एपीआई रूबी क्लाइंट का उपयोग कर रहा है, यहाँ विवरण:

google-api-client (0.13.1) 
    addressable (~> 2.5, >= 2.5.1) 
    googleauth (~> 0.5) 
    httpclient (>= 2.8.1, < 3.0) 
    mime-types (~> 3.0) 
    representable (~> 3.0) 
    retriable (>= 2.0, < 4.0) 

मुद्दा मैं आ रही त्रुटि का सामना नहीं कर रहा है, लेकिन वह कैलेंडर सफलतापूर्वक डाला जाता है।

जैसा कि आप प्रतिक्रिया से देख सकते हैं मुझे कुछ भी वापस नहीं मिलता है जो मुझे बताता है कि यह 503, जैसे कि Google कैलेंडर आईडी के बावजूद सफल रहा था।

मेरे आवेदन पर इसका असर यह है कि मुझे नहीं पता कि मैंने सफलतापूर्वक समन्वयित किया है, और वास्तव में, दस्तावेज़ों का पालन करके, मैं कार्यान्वयन और घातीय बैकऑफ का उपयोग करके, और इसलिए मैं अपने उपयोगकर्ताओं के Google पर डुप्लिकेट कैलेंडर बनाना जारी रखता हूं कैलेंडर।

अंत में, मेरे पास अनाथ कैलेंडर का एक समूह है जो दिखा रहा है कि मुझे एक स्ट्रिंग मैच से हटाना होगा।

क्या यह उम्मीद है? क्या ऐसा कुछ भी है जो मैं इसे कम करने के लिए कर सकता हूं?

यह नियमितता के साथ होता है, और यह एक अलग मामला नहीं है।


प्रश्न में कोड:

def handle_calendar_response(response, error) 
    self.update_column('last_synced_at', Time.now.utc) 
    if error.present? 
    Airbrake.notify('Sync Calendar Sync Error', { 
     error: error, 
     message: error.message, 
     calendar: self 
    }) 

    # String match :(
    if error.message =~ /not.?found/i || error.message =~ /forbidden/i 
     Airbrake.notify('Removing user deleted calendar', { 
     calendar: self, 
     google_calendar_id: self.google_calendar_id, 
     error: error, 
     message: error.message 
     }) 
     self.publish_to_google = false 
     self.google_calendar_id = nil 
     self.save! 
    end 
    end 
end 

... 

def insert_calendar 
    @client.insert_calendar(google_calendar_object) do |response, error| 
    handle_calendar_response(response, error) 
    if response.present? 
     self.google_calendar_id = response.id 
     self.save! 
    end 
    end 
end 

ये हमारे डेटा मॉडल में समन्वयित कैलेंडर का प्रतिनिधित्व से तरीके हैं। आप इसे सम्मिलित करने के लिए insert_calendar पर कॉल कर सकते हैं। हम हमेशा Google से प्रतिक्रिया पर एक ही कार्रवाई करते हैं, अगर हम डालने, अपडेट करने या हटाने के लिए, हम हमेशा handle_calendar_response पर कॉल करते हैं।

+3

क्या आप कृपया कोड भेज सकते हैं कि किस उपयोग का उपयोग कर रहे हैं? –

+0

क्या करेंगे। क्षमा याचना। –

+1

मुझे नहीं लगता कि इसकी उम्मीद है। आप https://developers.google.com/google-apps/calendar/support पर Google के साथ एक बग रिपोर्ट दर्ज कर सकते हैं। Google कैलेंडर एपीआई से लौटाई गई "बैकएंड त्रुटि" और "सर्वर त्रुटि" संदेश देखकर, ऐसा लगता है कि यह उनके अंत में कुछ है। प्रतिक्रिया प्रतिक्रिया में "बैकएंड त्रुटि" के साथ 503 होने पर प्रतिक्रिया को पार्स करके आप कम कर सकते हैं, तो आप अपने कोड में आगे बढ़ते हैं जैसे कि यह सफल था। – petryuno1

उत्तर

1

चूंकि त्रुटियां Google बैकएंड सिस्टम में हैं, इसलिए आप एक बग रिपोर्ट दर्ज करने के अलावा अपने पक्ष में इसे ठीक करने के बारे में बहुत कुछ नहीं कर सकते हैं। हालांकि आप अपने स्वयं के पहचानकर्ता को जोड़ने और इसे जिस कैलेंडर को बनाना चाहते हैं, उसे निजी extended properties में डालकर इसे अपने पक्ष में संभाल सकते हैं। पहचानकर्ता दिनांक/समय और घटना के विषय या यहां तक ​​कि एक यादृच्छिक UIID के संयोजन की तरह कुछ हो सकता है जब तक आप गारंटी देते हैं कि यह अद्वितीय है। फिर जब आप त्रुटि प्राप्त करते हैं तो पहले एक और अनुरोध जारी करने से पहले उपयोगकर्ता कैलेंडर के माध्यम से जाएं और जांचें कि क्या उसी तारीख पर पहचानकर्ता के साथ कोई ईवेंट है या नहीं। यह मानता है कि आपने उपयोगकर्ताओं के कैलेंडर के लिए अधिकार पढ़े हैं। उम्मीद है की यह मदद करेगा।

+0

एक स्ट्रिंग मैच से बेहतर, उत्तर के लिए धन्यवाद। –

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