Почему Heroku ведет журнал, используя время сервера, а не часовой пояс Rails? - PullRequest
34 голосов
/ 27 апреля 2010

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

В: Как мне записать журнал в правильном Time.zone? Разница в 9 часов, геройку (с запада) - Норвегия, отвлекает от работы. Я получаю это в моем 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>

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

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

Time.now Mon 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. Я что-то здесь неправильно понимаю?

Ответы [ 3 ]

73 голосов
/ 02 июня 2010

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

heroku config:add TZ=Europe/Oslo

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

2 голосов
/ 31 мая 2010

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

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

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

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

0 голосов
/ 04 июля 2018

Я обнаружил, что вышеуказанные решения не работают на Heroku. Я положил это в моем config / environment / 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...