在Rails开发中无法获得手动缓存过期

时间:2014-01-31 11:28:05

标签: ruby-on-rails caching heroku ruby-on-rails-4

我正在尝试在开发中的Rails 4上设置手动低级缓存到期。在视图中的某个操作之后触发缓存到期,这导致后台作业(使用延迟作业)实际上是包含缓存代码的自定义类。

这是触发器:

if request.patch?
  @startup_funding = StartupFunding.where(id: params[:id]).first
  if @startup_funding.update_attributes(startup_funding_round_params)
    redirect_to unique_names_path(@startup_funding.startup.unique_names.unique_name)
    GraphUpdate.delay.update
  end
end

这是我正在使用的自定义类,它会删除密钥并从头创建一个:

class GraphUpdate < ActiveRecord::Base
  def update
    Rails.cache.delete('x')
    Rails.cache.fetch('x') do
        'test123'
    end
  end
end

我在development.rb中激活了缓存:config.action_controller.perform_caching = true

当我最初尝试没有cache.delete('x')时,我能够成功地将'x'保存为'test',但似乎缓存没有到期。

不确定出了什么问题。另外,如果我在Heroku中实现它,是否需要采取任何特殊操作,或者它是否已经开箱即用?

1 个答案:

答案 0 :(得分:0)

要使缓存过期,您需要指定过期时间。这是一个link to the documentation。简而言之,您需要执行以下操作:

Rails.cache.fetch('x', :expires_in => 60.seconds) { 'test123' }