Rails Postgres Обработка часовых поясов - PullRequest
1 голос
/ 16 февраля 2012

Простая вещь, которую я хочу, это сохранить DateTime в UTC в базе данных и снова извлечь его в UTC, но рельсы, похоже, предполагают, что я сохранил DateTime в своем местном часовом поясе и добавляет разницу в 8 часов (PST). У меня есть поле DateTime в моей модели. Если я отправляю запрос (PUT) на обновление этого поля в конкретном экземпляре моей модели, временные зоны каким-то образом перепутываются по любой причине:

Отправка на рельсы по PUT: 2012-02-17T03: 46: 58Z

Возвращено через последующий GET: 2012-02-17T11: 46: 58Z

Разница во времени составляет ровно 8 часов и может быть объяснена моим часовым поясом, который является PST (-08: 00).

Я использую Datamapper 1.2 на Rails 3.1.3.

Я явно установил часовой пояс конфигурации приложения в UTC.

Я также пытался использовать dm-zone-types. Ничего не изменило для меня.

git-bisect в моем репо показал, что это неправильное поведение было введено, когда я переключил базу данных на postgres с исходного sqlite. Этот коммит изменил только database.yml и gemfile. Ничего другого.

Есть идеи?

1 Ответ

2 голосов
/ 16 февраля 2012

Я сам нашел хакерское решение:

Установите часовой пояс сервера в переменной среды TZ на «UTC».Чтобы сохранить этот параметр конфигурации, я решил поместить параметр переменной среды в config / boot.rb:

ENV['TZ'] = "UTC"

Я все еще чувствую себя грязным, и это решение все еще дает мне волю.Так что любое лучшее / более чистое решение высоко ценится!

...