Rails - 如何在MongoID中正确保存日期时间并使用whenerver(cronjobs)触发它们



我尝试使用Mongoid将日期时间保存到MongoDB中的事件中。困难在于我想将它们保存在不同的时区(例如柏林和伦敦(。我希望用户(管理员(看到时区中的实际时间,这样他就不需要计算了。之后,我有一个 cron 工作,它每分钟都会寻找一个要处理的事件。

我有以下参数:

application.rb(我尝试没有 -> 标准 UTC -> 伦敦还可以,柏林错误的时间(

config.time_zone = 'Berlin'  # as the server stays in Germany

mongoid.yml(尝试了所有组合,需要use_activesupport_time_zone才能获得正确的时间 int oDB(

use_activesupport_time_zone: true    
use_utc: false

schedule.rb(到目前为止没有问题(

every 1.minutes do
 runner "Event.activate_due", environment: 'development'
end

event.rb(不确定我现在在看哪个时间(

def self.activate_due
  events_due = Event.where(:eventStart.lte => (Time.now  + 1.minute), :eventStart.gte => (Time.now))
  events_due.each do |e|
    e.activate
  end
end

我尝试在事件#new中更改Time.zone,以描述simple_form中时区的实际时间。它似乎有效,但随后控制器创建方法似乎再次将参数视为标准时区,并错误地转换它(+-1小时时在伦敦/柏林试验时(。我尝试了几乎所有的参数组合,也尝试了Time.now/Time.zone.now。在事件#index中,我切换time_zones以显示正确的时间。

更复杂的是:我将时区保存在区域模型中,该时区通过 areaId 与事件模型连接。

我将如何在表单中向管理员显示他要添加的区域(而不是他的时区(中事件的正确时间,并将其正确保存在 Mongo 中以便稍后通过 cronjob 触发它?

尝试以下操作

def self.activate_due
  events_due = Event.where(
     :eventStart.to_utc.lte =>(Time.now.to_utc),
     :eventStart.to_utc.gte => (1.minute.ago.to_utc))
  events_due.each do |e|
    e.activate
  end
end

请注意,这将适用于 UTC 时间,因此如果您有 UTC - 7 时区的事件,如果服务器时区为 UTC + 2,则认为它现在不会被激活

相关内容

  • 没有找到相关文章

最新更新