插入我運行到哪裏我送一個insert_calendar
請求,谷歌日曆API V3的一個問題,我找回瞭如下回應:谷歌日曆API V3 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>
我使用谷歌API Ruby客戶端,詳情點擊這裏:
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
,如谷歌日曆ID。
這對我的應用程序的影響是我不知道我已經成功同步,事實上,通過跟隨文檔,我實現了指數回退,因此我繼續在用戶的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
。
能否請您發送代碼? –
會做。道歉。 –
我不認爲這是預期的。您可以通過https://developers.google.com/google-apps/calendar/support向Google提交錯誤報告。看到Google Calendar API返回的「後端錯誤」和「服務器錯誤」消息,它看起來像是它們的末端。也許你可以通過解析響應,如果它在響應正文中是503,帶有「後端錯誤」,那麼你可以在你的代碼中繼續進行,就好像它是成功的。 – petryuno1