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 ответ
Код, похоже, не является проблемой здесь.
Я предполагаю, что происходит одно из следующего
- Вы ограничены в скорости? (Маловероятно, чтобы выйти за пределы с приложением Smaple, но все еще легко проверить с помощью кодов ответов)
- Загрузка занимает более 2 секунд (по умолчанию таймаут ответа http по умолчанию равен 2 секундам, а настройка по умолчанию для фарадея - net: http)
Что бы я делал в этой ситуации. Я бы следующее, прежде чем принять решение о следующих шагах
Выведите коды ошибок объекта ответа и заголовки http в гем клиента api из объекта ответа. Я бы искал, что такое заголовок кэширования в ответе и каков код состояния.
Если у вас есть ngrep на вашем рабочем компьютере, просто дайте ему распечатать и показать весь ответ на http-запрос, а не печатать его в геме.
Если ответ занимает более 2 секунд, увеличьте время ожидания для net::http и проверьте.