为什么Heroku使用服务器时间而不是Rails时区进行日志记录?

时间:2010-04-27 07:04:59

标签: ruby-on-rails logging time timezone heroku

更新:好的,我没有制定好的Q来回答。我仍然在-07:00 UTC和我在+ 02:00 UTC时遇到heroku。

问:如何使用正确的Time.zone编写日志? 9个小时的差异,heroku(美国西部) - 挪威,让人分心。我在我的production.log中使用heroku logs):

  

处理ProductionController #create to xml(适用于 2010-04-28 23:00:12 的81.26.51.35)[POST]

如何让它写2010-04-29 08:00:12 +02:00 GMT

请注意,我正在heroku运行,无法自行设置服务器时间,就像您在亚马逊EC2服务器上所做的那样。下面是我之前的问题,我会留下它,因为它包含一些有关时间和区域的有趣信息。


当我在Time.now

中设置另一个时区时,为什么environment.rb会产生服务器本地时间
config.time_zone = 'Copenhagen'

我把它放在视图中

<p> Time.zone <%= Time.zone %> </p>
<p> Time.now <%= Time.now %> </p>
<p> Time.now.utc <%= Time.now.utc %> </p>
<p> Time.zone.now <%= Time.zone.now %>  </p>
<p> Time.zone.today <%= Time.zone.today %> </p>

在我的应用 heroku

上呈现此结果
  

Time.zone(格林尼治标准时间+01:00)哥本哈根

     

Time.now Mon Apr 26 08:28:21 -0700   2010

     

Time.now.utc Mon Apr 26 15:28:21 UTC   2010

     

Time.zone.now 2010-04-26 17:28:21   0200

     

Time.zone.today 2010-04-26

Time.zone.now会产生正确的结果。我是否必须在任何地方从Time.now切换到Time.zone.now?看起来很麻烦。我真的不在乎服务器的本地时间是什么,由于大量使用Time.now,它给我带来了麻烦。我在这里误解了什么根本的东西吗?

3 个答案:

答案 0 :(得分:73)

在对我自己的Heroku时区问题进行进一步调查后,我发现了一个帖子,表明你实际上可以在应用程序级别指定时区,使用以下命令:

heroku config:add TZ=Europe/Oslo

我相信这可能是你所有麻烦的答案。感谢http://www.reality.hk/articles/2010/01/07/1319/编辑:截至2012.08.23的断开链接。Archived copy。)

答案 1 :(得分:2)

无法改变实际的服务器时间(我认为你无法在Heroku上做到),你唯一的选择就是自己转换时间。

如果Time.zone.now过于繁琐,您可以使用tzinfo gem设置全局时区:

$tz = TZInfo::Timezone.get("Europe/Oslo")
$tz.now # current time in Norway

但这仍然是您应用中的全局变化,与您正在做的事情没有太大差别。

答案 2 :(得分:0)

我发现上述解决方案不适用于Heroku。 我把它放在我的config / environments / production.rb中 确保在初始化记录器之前放好它

Rails::Rack::Logger.class_eval do
# Override logging to spit out time in different zone to easier find user reported 
errors
# https://github.com/rails/rails/blob/v3.2.14/railties/lib/rails/rack/logger.rb#L38
 def started_request_message(request)
  'Started %s "%s" for %s at %s' % [
    request.request_method,
    request.filtered_path,
    request.ip,
    Time.now.in_time_zone('Melbourne') ]
 end
end