Отметка времени не обновляется в приложении RoR - PullRequest
4 голосов
/ 03 апреля 2011

У меня есть небольшой сайт, который сортирует темы новостей по дате отправки на второй.Локально это работает нормально.Даже при быстром размещении историй подряд есть разница в отметке времени.

Пример:

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 value:

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 ]

6 голосов
/ 03 апреля 2011

Полагаю, вам нужно изменить значение по умолчанию на Proc .

В режиме разработки ваши модели перезагружаются при каждом запросе, поэтому DateTime.now всегда актуален. Однако в производственном процессе класс загружается только один раз (за один цикл) во время запуска приложения, и DateTime.now приводит к статическому значению.

field :added_on, :type => DateTime, :default => Proc.new { DateTime.now }

должно быть тем, что вы хотите.

5 голосов
/ 03 апреля 2011

Это объявление в вашем классе:

field :added_on, :type => DateTime, :default => DateTime.now

Будет обрабатываться при чтении файла. На Heroku это происходит, когда вы загружаете обновление и слаг компилируется. В результате значение по умолчанию фиксируется в любое время, когда происходит скомпилирование слага. Попробуйте вместо этого:

field :added_on, :type => DateTime, :default => lambda { DateTime.now }

В вашей среде разработки все работает нормально, потому что файл постоянно перезагружается.

...