@withkittens

Загрузить ресурс раз в 10 минут и закэшировать?

Допустим, есть внешний API: someexternalsvc.org/products.json. Контроллер должен использовать эти данные, чтобы как-то обработать (например, построить по ним красивую табличку) и вывести пользователю. Понятно, что на каждый запрос дёргать внешний API растратно (трафик, кап на количество вызовов, да и данные обновляются редко), поэтому можно обновлять данные раз в 10 минут.

Как подобные вещи реализуются в продакшене?

Поскольку с rails почти не знаком, попробовал погуглить. Текущая догадка: нужно написать rake-таску, которая будет исполняться по внешнему таймеру (например, по cronу) и загружать json.

Где и как организовать хранение (кэширование) загруженных данных? Есть ли способ без записи в БД или в файлы (данных ~на пару Кб)?
  • Вопрос задан
  • 2256 просмотров
Решения вопроса 2
mgyk
@mgyk
Заверните просто в рельсовый кэш. По-дефолту будет использовать фаилы (можно переключить на memcache)
Rails.cache.fetch("products", :expires_in => 10.minutes) do
   ....
end
Ответ написан
Able1991
@Able1991
Пишу на рельсах
def get_my_json
  json = nil
  if Rails.cache.exist?('my_json')
    json = Rails.cache.read('my_json')
  else
    response = RestClient.get 'someexternalsvc.org/products.json'
    json = JSON(response)
    Rails.cache.write('my_json',json, :expires_in => 10.minutes)
  end
  json 
end
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы