2

我正在尝试使用带有 Rails 3.1 的 Memcached 插件和 Heroku cedar 堆栈上的 dalli 设置缓存系统,其中有许多项目应该在每天结束时过期。

为此,我使用了一种实用方法:

def self.seconds_to_next_day
  ((DateTime.now.end_of_day - DateTime.now) * 24 * 60 * 60).to_i.seconds
end

在haml视图中像这样缓存:

- cache "user_#{current_user.id}_my_groups", :expires_in => Utils.seconds_to_next_day do
  = render "shared/my_groups"

但它不会在每天结束时到期。我也尝试过将秒数作为整数传递,不带 .seconds,但没有任何区别。

现在我已经退回到每天 00:00 运行的计划任务并清除对日期敏感的缓存项,但我更喜欢使用本机缓存到期。

有任何想法吗?谢谢!

4

1 回答 1

2

为了在 Rails 和 Heroku 上正确计算时间,您需要适当地使用 Time 和 zone。因此,您想要的是以下内容。

Time.zone.now.end_of_day - Time.zone.now
于 2012-05-05T04:18:03.690 回答