gpt4 book ai didi

google-api - Google Calendar API V3 insert_calendar 返回 503,但日历插入成功

转载 作者:行者123 更新时间:2023-12-04 21:33:11 25 4
gpt4 key购买 nike

我遇到了发送 insert_calendar 的问题向 Google Calendar API V3 发出请求,我得到以下响应:

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 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,但我没有得到任何回复告诉我它是成功的,例如 Google 日历 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 .

最佳答案

由于错误出现在谷歌后端系统中,除了提交错误报告之外,您无能为力地修复它。但是,您可以通过添加自己的标识符并将其放入私有(private) extended properties 来处理这个问题。您要创建的日历。标识符可以是日期/时间和事件主题的组合,甚至可以是随机 UIID,只要您保证它是唯一的即可。然后在收到错误时发出另一个请求之前,首先浏览用户日历并检查在同一日期是否有带有标识符的事件。这假定您具有用户日历的读取权限。希望这可以帮助。

关于google-api - Google Calendar API V3 insert_calendar 返回 503,但日历插入成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45889943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com