Ruby-клиент Google API, по-видимому, не получает все события

Я использовал пример репозитория Google API Ruby на Github в качестве отправной точки для моего календарного приложения.

Работает хорошо и обычно без проблем. Однако в последнее время я заметил, что мое производственное приложение не получает все события. Я представляю события в таблице после запроса нескольких календарей через клиент ruby. При моем первоначальном звонке есть только даты, которые я генерирую с моим приложением, данные из календарей вообще не выбираются. По второму запросу некоторые календари будут возвращать данные, и при перезагрузке приложения еще пару раз все календари будут возвращать события.

Так что мне кажется, что происходит какое-то кеширование. Если данные не возвращаются достаточно быстро, мне возвращается пустой ответ. Повторный запрос отправляет некоторые данные, и чем больше я запрашиваю, тем больше данных возвращается.

Возможно, что-то не так с моей настройкой, которая не идеальна, я полагаю:

get '/' do
  #fetch all calendars
  result = api_client.execute(:api_method => calendar_api.calendar_list.list,
                              :authorization => user_credentials)
  cals = result.data.items.map do |i|
    #skip id calendar does not belong to owner or is the "private" primary one
    next if i.primary || i.accessRole != "owner"
    i.summary
  end
  cals.compact!
  #save all users mentioned in calendars in a set
  events_list = result.data.items.map do |i|
    #skip calendar if primary or not owned by user (cannot be changed anyway)
    next if i.primary || i.accessRole != "owner"
    r = api_client.execute(:api_method => calendar_api.events.list,
                           :parameters => {'calendarId' => i.id},
                           :timeMax => DateTime.now.next_month,
                           :timeMin => DateTime.now.beginning_of_month)
    #capture all calendars and their events and map it to an Array
    r.data.items.delete_if { |item| item.status == "cancelled" }
  end
  #remove skipped entries (=nil)
  events_list.compact! 
  slim :home, :locals => { :title => Konfig::TITLE, :events_list => events_list, :cals => cals}
end

Кстати::timeMax и:timeMin тоже не работают должным образом, но это другой вопрос, я полагаю.

1 ответ

Решение

Код, похоже, не является проблемой здесь.

Я предполагаю, что происходит одно из следующего

  1. Вы ограничены в скорости? (Маловероятно, чтобы выйти за пределы с приложением Smaple, но все еще легко проверить с помощью кодов ответов)
  2. Загрузка занимает более 2 секунд (по умолчанию таймаут ответа http по умолчанию равен 2 секундам, а настройка по умолчанию для фарадея - net: http)

Что бы я делал в этой ситуации. Я бы следующее, прежде чем принять решение о следующих шагах

  1. Выведите коды ошибок объекта ответа и заголовки http в гем клиента api из объекта ответа. Я бы искал, что такое заголовок кэширования в ответе и каков код состояния.

  2. Если у вас есть ngrep на вашем рабочем компьютере, просто дайте ему распечатать и показать весь ответ на http-запрос, а не печатать его в геме.

  3. Если ответ занимает более 2 секунд, увеличьте время ожидания для net::http и проверьте.

Другие вопросы по тегам