我正在尝试使用带有Rails 3.1和dalli的Memcached插件在Heroku雪松堆栈上设置一个缓存系统,其中包含许多应该在每天结束时到期的项目。
为此,我使用的是实用方法:
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运行的计划任务并清除了日敏感缓存项,但我更喜欢使用本机缓存过期。
有什么想法吗?谢谢!
答案 0 :(得分:2)
为了在Rails和Heroku上正确计算时间,您需要尊重地使用时间和区域。因此,您想要的是以下内容。
Time.zone.now.end_of_day - Time.zone.now