Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails.cache.fetch未将新数据写入缓存_Ruby On Rails_Ruby_Class_Caching - Fatal编程技术网

Ruby on rails Rails.cache.fetch未将新数据写入缓存

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

我在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_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。诚实地缓存身份验证确实是个坏主意。