我有一个小网站,根据提交日期对新闻主题进行排序。在本地,这很好。即使在连续快速发布故事时,时间戳也会有所不同。
示例:
Submitted Fri Mar 25 14:31:09 2011
Submitted Fri Mar 25 14:30:45 2011
Submitted Fri Mar 25 14:30:23 2011
但是,一旦将代码推送到heroku并且使用MongoHQ设置数据库,则秒值似乎被忽略或冻结。
示例文档DateTime值:
added_on 03/14/2011 09:58 AM
示例时间戳:
Submitted Thu Mar 24 13:48:40 2011
Submitted Thu Mar 24 13:48:40 2011
Submitted Thu Mar 24 13:48:40 2011
Submitted Thu Mar 24 13:48:40 2011
看起来秒值没有更新?
这是型号代码,
class Post
include Mongoid::Document
field :link
field :title
field :synopsis
field :added_on, :type => DateTime, :default => DateTime.now
field :poster
field :category
validates_presence_of :link
validates_presence_of :title
validates_presence_of :synopsis
validates_presence_of :category
validates_uniqueness_of :link
validates_uniqueness_of :title
embeds_many :replies
#referenced_in :topic
end
答案 0 :(得分:6)
我的猜测是你需要将默认值更改为Proc 。
在开发模式下,每个请求都会重新加载模型,因此DateTime.now
始终是最新的。但是,在生产中,该类仅在应用启动期间加载一次(每个dyno),DateTime.now
会产生静态值。
field :added_on, :type => DateTime, :default => Proc.new { DateTime.now }
应该是你想要的。
答案 1 :(得分:5)
班上的这个声明:
field :added_on, :type => DateTime, :default => DateTime.now
读取文件时将处理。在Heroku上,当您推送更新并编译slug时会发生这种情况。结果是默认值固定在编译slug时的任何时间。试试这个:
field :added_on, :type => DateTime, :default => lambda { DateTime.now }
在开发环境中,一切都可能正常工作,因为文件一直在重新加载。