Ruby on rails Rails.cache.fetch未将新数据写入缓存
我在rails中缓存API中的一些数据时遇到问题。我不知道我是否误解了低级缓存,或者我的设置不可能实现低级缓存Ruby on rails Rails.cache.fetch未将新数据写入缓存,ruby-on-rails,ruby,class,caching,Ruby On Rails,Ruby,Class,Caching,我在rails中缓存API中的一些数据时遇到问题。我不知道我是否误解了低级缓存,或者我的设置不可能实现低级缓存 def initialize # Podio authentication Rails.cache.fetch("podio_companies_#{Time.now.end_of_year.to_s(:number)}/connection", expires_in: 1.year) do Podio.setup(api_key: API_KEY, api_secret: API
def initialize
# Podio authentication
Rails.cache.fetch("podio_companies_#{Time.now.end_of_year.to_s(:number)}/connection", expires_in: 1.year) do
Podio.setup(api_key: API_KEY, api_secret: API_SECRET)
Podio.client.authenticate_with_credentials(CLIENT_EMAIL, CLIENT_PASSWORD)
end
self.podio_companies = Rails.cache.fetch("podio_companies_#{Time.now.end_of_hour.to_s(:number)}/data", expires_in: 1.hour) do
Podio::Item.find_all(PODIO_APP_ID, limit: 130)[0]
end
当在中设置的时间过期(1小时)时,变量为零且不会刷新。请正确提供代码。提供的代码无效,因为初始化方法î未关闭。看看什么是Podio.client,什么是Podio::Item.find_all在最后一个块后错过了一个“结束”,这会很有帮助。客户端只是一个经过验证的API客户端,它是一个外部应用程序(不太相关),而Podio::Item.find_all只是从应用程序中检索大量信息。我正在使用“podio”gem来使用podio。如果cacheî已经存在,并且GC运行podio.client,那么Rails.cache.fetch的第一个块将完全跳过身份验证。因此,当Podio::item的缓存过期时,将无法获取任何内容。您需要分别缓存Podio.setup.and Podio.client.authenticate的响应。然后使用这些调用findîall。诚实地缓存身份验证确实是个坏主意。