2009-11-05 101 views
2

我试图设置博客发布以在将来某些日期发布。我有我的发帖模型:Ruby on Rails:为博客发布设置未来“发布”日期

named_scope :published, :conditions => ["publish_at <= ?", Time.now] 

我使用这个在我的控制器调用发表的贴子:

@postings = Posting.published 

开发服务器工作正常,但我相信在生产服务器需要我刷新缓存(使用“pkill -9 dispatch.fcgi”),否则当它应该发布时,我不会看到新的张贴。

是否有任何方法可以在生产服务器上正确设置发布日期的未来时间?我每次都必须刷新缓存吗?

回答

3

您是正确的,因为命名范围是在类加载时评估的。

您应该重新编写它为动态或(可能更好)使用数据库的now()函数。

这些任选其一:

named_scope :published, lambda { {:conditions => ["publish_at <= ?", Time.now]} } 

注意这是如何使用lambda来总是在条件散列返回当前时间。

named_scope :published, :conditions => "publish_at <= now()" 

这是数据库的依赖(上面应该为MySQL工作),但可能快一点点。

+0

有趣。似乎没有这样描述:http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html – 2009-11-05 02:54:09

+0

非常感谢卢克!我会测试一下,看看它是否有效。非常感谢。 – sjsc 2009-11-05 02:55:37

+0

谢谢卢克!你是救命恩人!它的工作原理=)谢谢! – sjsc 2009-11-05 03:16:45

0

检查,看看是否有任何下面的语句在生产环境:

ActionController::Base.cache_store = :memory_store 

OR

ActionController::Base.cache_store = :file_store, "/path/to/cache/directory" 

OR

ActionController::Base.cache_store = :mem_cache_store 

或任何其他设置为ActionController::Base.cache_store

+0

嗨罗恩。我没有这些。我只有这些: config.cache_classes = true config.action_controller.consider_all_requests_local = false config.action_controller.perform_caching = true – sjsc 2009-11-05 02:34:34

+0

嗯,我不知道你为什么看到这种效果。 – 2009-11-05 02:38:23

+0

它似乎不立即发布(我确实看到一篇文章的发布日期是几个小时前发布好吧)。我在想,也许这只需要几个小时左右之前,Rails重置或什么。 – sjsc 2009-11-05 02:44:41