Tôi đang chạy vào một vấn đề mà tôi gửi một yêu cầu insert_calendar
đến Google V3 Lịch API, và tôi lấy lại phản ứng sau:Google V3 API Lịch insert_calendar trả 503, nhưng lịch đã được đưa thành công
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>
Tôi đang sử dụng Google API Ruby Client, chi tiết tại đây:
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)
Vấn đề tôi đang gặp không gặp lỗi, nhưng lịch đã được chèn thành công.
Như bạn có thể thấy từ câu trả lời, tôi không nhận được gì ngược lại cho tôi biết nó đã thành công mặc dù số 503
, chẳng hạn như ID Lịch Google.
Tác động này có trên ứng dụng của tôi là tôi không biết tôi đã đồng bộ hóa thành công và thực tế, bằng cách làm theo tài liệu, tôi triển khai và trả về theo cấp số nhân và vì vậy tôi tiếp tục tạo lịch trùng lặp trên Google của người dùng Lịch.
Cuối cùng, tôi có một loạt các lịch mồ côi hiển thị mà tôi phải xóa bằng kết hợp chuỗi.
Điều này có được mong đợi không? Tôi có thể làm gì để giảm thiểu điều này không?
Điều này xảy ra thường xuyên và không phải là trường hợp riêng biệt.
Các mã trong câu hỏi:
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
Đây là những phương pháp từ một đại diện của một cuốn lịch được đồng bộ hóa trong mô hình dữ liệu của chúng tôi. Bạn có thể gọi insert_calendar
để chèn. Chúng tôi luôn thực hiện hành động tương tự đối với phản hồi từ Google, nếu chúng tôi đang chèn, cập nhật hoặc xóa, chúng tôi luôn gọi handle_calendar_response
.
Bạn có thể vui lòng gửi mã sử dụng đang sử dụng không? –
Sẽ làm. Xin lỗi. –
Tôi không nghĩ rằng nó được mong đợi. Bạn có thể gửi báo cáo lỗi với Google tại https://developers.google.com/google-apps/calendar/support. Thấy thông báo "Lỗi phụ trợ" và "lỗi máy chủ" được trả lại từ API Lịch Google, có vẻ như đó là thứ gì đó ở cuối của chúng. Có lẽ bạn có thể giảm thiểu bằng cách phân tích cú pháp phản hồi nếu nó là 503 với "lỗi phụ trợ" trong nội dung phản hồi, bạn tiến hành trong mã của mình như thể nó đã thành công. – petryuno1