时间戳未在RoR应用程序中更新

时间:2011-04-03 00:35:36

标签: ruby-on-rails ruby mongodb heroku mongoid

我有一个小网站,根据提交日期对新闻主题进行排序。在本地,这很好。即使在连续快速发布故事时,时间戳也会有所不同。

示例:

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

2 个答案:

答案 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 }

在开发环境中,一切都可能正常工作,因为文件一直在重新加载。