Rails не использует летнее время

Часы моего сервера настроены на лондонское время (в настоящее время я живу в зоне GMT+0). Вывод timedatectl status дает мне это:

  Local time: Mon 2016-05-23 08:13:06 BST   Universal time: Mon 2016-05-23 07:13:06 UTC
    RTC time: Mon 2016-05-23 07:13:06
    Timezone: Europe/London (BST, +0100)
 NTP enabled: yes NTP synchronized: no  RTC in local TZ: no
  DST active: yes  Last DST change: DST began at
              Sun 2016-03-27 00:59:59 GMT
              Sun 2016-03-27 02:00:00 BST  Next DST change: DST ends (the clock jumps one hour backwards) at
              Sun 2016-10-30 01:59:59 BST
              Sun 2016-10-30 01:00:00 GMT

И в моем файле application.rb я установил часовой пояс:

config.time_zone = 'London'

Локально работает правильно:

Time.now.dst?
# true
Time.now.hour
# 8

Но в производстве кажется, что летнее время не включено.

Time.now.dst?
# false
Time.now.hour
# 7

Я не уверен, связано ли это с Rails или неправильной конфигурацией сервера, но для меня это кажется правильным.


person pzin    schedule 23.05.2016    source источник
comment
Это дает вам другой часовой пояс или даже другое время (UTC) или это действительно просто летнее время?   -  person xyious    schedule 23.05.2016
comment
ты пробовал config.time_zone = 'London' config.active_record.default_timezone = :local ?   -  person Volodymyr Balytskyy    schedule 23.05.2016
comment
Возможно дата/время на производстве неправильные (еще зимой)?   -  person BoraMa    schedule 23.05.2016
comment
Time.zone.to_s возвращает мне (GMT+00:00) Лондон. Так что часовой пояс кажется правильным, но все еще зимнее время. Но date на сервере возвращает мне правильное время с DST (с BST, британское летнее время).   -  person pzin    schedule 23.05.2016
comment
Я пробовал это @RareFever, но все та же проблема. В любом случае это не проблема AR, потому что это происходит даже в обычном (не связанном с AR) объекте Time.   -  person pzin    schedule 23.05.2016
comment
Если вы перезагрузили сервер приложений в рабочей среде после развертывания настройки локали, не могли бы вы попробовать более тщательный перезапуск, например. если вы использовали unicorn, не могли бы вы попробовать unicorn upgrade вместо unicorn update, чтобы наверняка загружался свежий код рельсов?   -  person BoraMa    schedule 23.05.2016
comment
Я пытался даже перезапустить сервер без везения. Я также перезапустил nginx и приложение, и все по-прежнему.   -  person pzin    schedule 23.05.2016
comment
На самом деле вы не должны полагаться на настройки часового пояса по умолчанию. Вместо этого используйте только время UTC с сервера, а затем обрабатывайте преобразование часового пояса в логике приложения, а не глобально.   -  person Matt Johnson-Pint    schedule 23.05.2016


Ответы (1)


Если это приложение работает в контейнере Docker, часовой пояс хост-сервера может не применяться к контейнерам. Вероятно, вы можете установить переменную среды TZ в любой часовой пояс, который вам нужен, и ruby ​​подберет его.

Я настоятельно рекомендую не использовать часовой пояс, отличный от UTC, для вашего приложения/базы данных, так как это почти наверняка вызовет проблемы в будущем.

Полное раскрытие: я один из сопровождающих dokku.

person Jose Diaz-Gonzalez    schedule 23.05.2016
comment
Это сработало. Я только что сделал dokku config:set app-name ENV=prod TZ=Europe/London. Грасиас @ Хосе. - person pzin; 24.05.2016