Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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 Redis缓存在视图中工作不正常_Ruby On Rails_Ruby_Caching_Redis - Fatal编程技术网

Ruby on rails Redis缓存在视图中工作不正常

Ruby on rails Redis缓存在视图中工作不正常,ruby-on-rails,ruby,caching,redis,Ruby On Rails,Ruby,Caching,Redis,对于缓存,我使用redis gem 'redis' gem 'redis-namespace' gem 'redis-rails' gem 'redis-rack-cache' 对视图中的html代码使用缓存 当我使用键设置缓存时,它会工作。但当我得到它时,它并没有整合,甚至价值也不存在 def cache(cache_name) value = $redis.get(cache_name) if value.nil? $redis.set(cache_name,yield,e

对于缓存,我使用redis

gem 'redis'
gem 'redis-namespace'
gem 'redis-rails'
gem 'redis-rack-cache'
对视图中的html代码使用缓存

当我使用键设置缓存时,它会工作。但当我得到它时,它并没有整合,甚至价值也不存在

def cache(cache_name)
  value = $redis.get(cache_name)
  if value.nil?
    $redis.set(cache_name,yield,ex:5.minutes)
  else
    value
  end
end
鉴于

<% cache("key") do %>
   <h1>Header</h1>
<%end%>

标题
问题是第一次显示标题,但下一次不显示偶数值,请尝试以下操作

def cache(cache_name)
  value = $redis.get(cache_name)
  if value.nil?
    $redis.set(cache_name,yield,ex:5.minutes)
  else
    value
  end
end
def cache(cache_name)
  Rails.cache.fetch(cache_name, expires_in: 5.minutes){ yield }
end
更新

Rails已经提供了一个帮助器来缓存片段,结果证明它与自定义帮助器的名称相同,所以只需更改方法的名称即可

def set_cache(cache_name)
  Rails.cache.fetch(cache_name, expires_in: 5.minutes){ yield }
end

您的视图保持不变。

为什么要编写自己的
cache
方法,而不使用Rails附带的
cache
方法?使用
Rails.cache.fetch
块应该needful@spickermann因为它是一个助手,它很普通function@Md.FarhanMemon“它的目的是什么?”斯皮克曼说,但它应该在这里工作缓存将存储在redis中?我在application.rbconfig.cache\u store=:redis\u store中设置了'redis://localhost:6379/0/cache“是的,它应该可以工作,如果你仍然收到相同的错误,请告诉我相同的问题,它不集成html