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

moc*_*pus 4 ruby ruby-on-rails heroku mongodb 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
Run Code Online (Sandbox Code Playgroud)

但是,一旦将代码推送到heroku并且使用MongoHQ设置数据库,则秒值似乎被忽略或冻结.

示例文档DateTime值:

added_on 03/14/2011 09:58 AM
Run Code Online (Sandbox Code Playgroud)

示例时间戳:

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
Run Code Online (Sandbox Code Playgroud)

看来秒值没有更新?

这是型号代码,

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
Run Code Online (Sandbox Code Playgroud)

Mic*_*ley 6

我的猜测是你需要将默认值更改为Proc.

在开发模式下,每个请求都会重新加载模型,因此DateTime.now始终是最新的.但是,在生产中,类仅在应用程序启动期间加载一次(每个dyno),并DateTime.now产生静态值.

field :added_on, :type => DateTime, :default => Proc.new { DateTime.now }
Run Code Online (Sandbox Code Playgroud)

应该是你想要的.


mu *_*ort 5

你班上的这个宣言:

field :added_on, :type => DateTime, :default => DateTime.now
Run Code Online (Sandbox Code Playgroud)

将在读取文件时处理.在Heroku上,当您推送更新并编译slug时会发生这种情况.结果是默认值固定在编译slug时的任何时间.试试这个:

field :added_on, :type => DateTime, :default => lambda { DateTime.now }
Run Code Online (Sandbox Code Playgroud)

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