Подтвердить что ты не робот

Почему журнал Heroku использует время сервера, а не часовой пояс Rails?

UPDATE: Хорошо, я не сформулировал хороший Q, на который нужно ответить. Я все еще борюсь с героикой, находящейся на -07: 00 UTC, и я на +02: 00 UTC.

В: Как получить журнал, написанный в правильной Time.zone? Разница в 9 часов, heroku (us west) - norway, отвлекает от работы. Я получаю это в своем production.log(используя heroku logs):

Обработка ProductionController # create to xml (для 81.26.51.35 при 2010-04-28 23:00:12) [POST]

Как мне его написать 2010-04-29 08:00:12 +02:00 GMT?

Обратите внимание, что я работаю в heroku и не могу установить время сервера самостоятельно, как это можно сделать на серверах Amazon 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>

рендеринг этого результата в моем приложении в герою

Time.zone(GMT + 01: 00) Копенгаген

Time.now Пн Апр 26 08:28:21 -0700 2010

Time.now.utc Пн Апр 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. Разве я не понимаю ничего принципиального здесь?

4b9b3361

Ответ 1

После некоторого дальнейшего изучения моих проблем с часовым поясом Heroku я нашел сообщение, которое указывает, что вы действительно можете указать часовой пояс на уровне приложения, используя следующую команду:

heroku config:add TZ=Europe/Oslo

Я считаю, что это может быть ответом на все ваши проблемы. Предоставлено http://www.reality.hk/articles/2010/01/07/1319/ ( Изменить: Неработающая ссылка с 2012.08.23. Архивированная копия.)

Ответ 2

Без возможности изменить фактическое время сервера (что я не думаю, что вы сможете сделать на Heroku), ваш единственный вариант - преобразовать время самостоятельно.

Если Time.zone.now слишком громоздко, вы можете установить глобальный часовой пояс, используя tzinfo gem:

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

Но это все еще глобальное изменение в вашем приложении и не сильно отличается от того, что вы делаете.