5

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.

+3

Bạn có thể vui lòng gửi mã sử dụng đang sử dụng không? –

+0

Sẽ làm. Xin lỗi. –

+1

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

Trả lời

1

Vì lỗi nằm trong hệ thống phụ trợ của google, bạn không thể thực hiện nhiều việc để sửa lỗi ở bên cạnh việc gửi báo cáo lỗi. Tuy nhiên, bạn có thể xử lý điều này bên cạnh bạn bằng cách thêm số nhận dạng của riêng bạn và đặt nó vào số extended properties riêng của lịch bạn muốn tạo. Mã định danh có thể giống như kết hợp ngày/giờ và chủ đề của sự kiện hoặc thậm chí một UIID ngẫu nhiên miễn là bạn đảm bảo nó là duy nhất. Sau đó, trước khi đưa ra một yêu cầu khác khi bạn gặp lỗi, trước tiên hãy xem lịch người dùng và kiểm tra xem có sự kiện nào có số nhận dạng trong cùng một ngày hay không. Điều này giả định rằng bạn đã đọc quyền cho lịch của người dùng. Hi vọng điêu nay co ich.

+0

Tốt hơn so với kết hợp chuỗi, cảm ơn bạn đã trả lời. –

Các vấn đề liên quan