以设定的间隔更新控制器变量

时间:2016-01-31 12:46:14

标签: ruby-on-rails ruby

我目前有以下简单的控制器:

class SimpleController < ApplicationController
  def index
    @results = fetch_results
  end
end

fetch_results是一项相当昂贵的操作,所以尽管上述方法有效,但我不希望每次刷新页面时都运行它。如何解除@results的更新,以便按固定的时间表更新,让我们每隔15分钟说一次。

这样,每次加载页面时,它都会返回当前的@results值,最坏的情况是14分59秒过时。

2 个答案:

答案 0 :(得分:7)

您可能希望使用Rails` low level caching

def index
  @results = Rails.cache.fetch('fetched_results', expires_in: 15.minutes) do
    fetch_results
  end
end

在Rails指南中阅读有关如何configure Rails' caching stores的更多信息。

答案 1 :(得分:1)

我会将其存储在数据库 中,并通过background job定期更新。更新将与某些事件相关,例如,如果用户执行了可能更改结果的操作,则会重新计算和更新结果。

另一种解决方案是使用 cron作业定期更新result,例如每小时更新一次。有一个很好的gem可以处理它。