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)
我的猜测是你需要将默认值更改为Proc.
在开发模式下,每个请求都会重新加载模型,因此DateTime.now始终是最新的.但是,在生产中,类仅在应用程序启动期间加载一次(每个dyno),并DateTime.now产生静态值.
field :added_on, :type => DateTime, :default => Proc.new { DateTime.now }
Run Code Online (Sandbox Code Playgroud)
应该是你想要的.
你班上的这个宣言:
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)
一切都可能在您的开发环境中正常工作,因为文件一直在重新加载.
| 归档时间: |
|
| 查看次数: |
603 次 |
| 最近记录: |