更新:好的,我没有制定好的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
,它给我带来了麻烦。我在这里误解了什么根本的东西吗?
答案 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