Rails Postgres Обработка часовых поясов

Самая простая вещь, которую я хочу, это сохранить 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 ответ

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

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

ENV['TZ'] = "UTC"

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

Другие вопросы по тегам