Rails Cache存储值但不工作?

时间:2018-03-16 19:11:42

标签: ruby-on-rails caching

我正在将外部API响应缓存到Rails中。我从缓存中读取并按预期返回nil。我存储到缓存中它返回true,我再次读取并返回我的值,但是如果我从客户端使用相同的参数发出另一个请求,则返回nil,就像没有存储该值一样。



<p>
&#13;
&#13;
&#13;

例如,我将首次使用邮政编码94016,它将返回

&#13;
&#13;
    def create
     cache = ActiveSupport::Cache::MemoryStore.new
       url = "http://api.openweathermap.org/data/2.5/weather?zip=" + params[:zip] +"&units=imperial&APPID=4e66533961b500086bf6bd7c37d4b847"
       @weather =  fetch_weather(url)
       p cache.read(params[:zip])
       weather = cache.read(params[:zip])
       p weather
       p weather.nil?
       if weather.nil?
        cache.write(params[:zip],@weather,:expires_in => 30.minutes)
       end
       p cache.read(params[:zip])

     render json: @weather
    end
&#13;
&#13;
&#13;

我将使用相同的邮政编码再次运行它并获得相同的响应。我在我的开发环境中启用了缓存。我不确定为什么它不起作用。谢谢。

1 个答案:

答案 0 :(得分:3)

因为每次请求此操作都会创建缓存存储:

cache = ActiveSupport::Cache::MemoryStore.new

你应该把这一行放在配置文件中:

config.cache_store = :memory_store, { size: 64.megabytes }

然后使用Rails.cache获取或设置缓存。