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"
Я все еще чувствую себя грязным, и это решение все еще дает мне волю. Так что любое лучшее / более чистое решение высоко ценится!