Рельсы 3.1 Часовой пояс, полностью в тупик - PullRequest
1 голос
/ 10 января 2012

У меня есть модель пользователя и модель друга. Я пытаюсь отследить, когда в последний раз пользователь связывался с другом. У меня есть демон, который собирает эту информацию и сохраняет ее с помощью:

  friend.last_contact = Time.parse(status.created_at) #this is where I go wrong
  friend.save

Я получаю эту информацию из твиттера, который сообщает в формате UTC в формате:

"Thu Jan 05 23:29:00 +0000 2012"

Когда я вхожу в консоль рельсов и выполняю эти команды, дата корректно сохраняется как UTC с временем UTC. Однако, когда я собираю эту информацию с помощью демона, она сохраняет ее в базе данных с UTC, но с местным временем ..., что делает его выходным на 4 часа ... Я запускаю своего демона с помощью бегунка рельсов, поэтому я считаю, что активная поддержка все должно быть в порядке. Я не могу на всю жизнь понять, что происходит не так ..

С моего сервера rails console какой-то вывод:

1.9.1 :001 > Time.now
=> 2012-01-10 00:40:37 +0400 

1.9.1 :002 > Time.zone.now
 => Mon, 09 Jan 2012 20:40:56 UTC +00:00 

Это отметка времени, сохраненная при получении сообщения 20 минут назад:

1.9.1 :009 > b.last_contact
 => Tue, 10 Jan 2012 00:27:20 UTC +00:00 

Вы заметите, что это «Time.now» сервера ... но сохранено как UTC ... Что меня беспокоит, так это то, что я захожу в консоль rails и набираю:

> friend.last_contact = Time.now ; friend.save

или

> friend.last_contact = Time.zone.now ; friend.save

Я выхожу в нужное время ...... любая помощь приветствуется.

1 Ответ

0 голосов
/ 10 января 2012

Я боролся с этой же проблемой, и с Twitter тоже (хотя это не очень актуально).

Три мысли:

  1. Является ли сервер, на котором вы запускаете ваш демон, в UTC время? Работа часовых поясов в Rails 3 заключается в том, что время конвертируется в системный часовой пояс при сохранении (не раньше). Так что это выглядит нормально, пока вы не сохраните значение.

  2. Возможно ли, что ваша тестовая / рабочая БД находится не в UTC, а ваша локальная тестовая БД есть? Если вы работаете в размещенном центре обработки данных, иногда они запускают свои базы данных не в UTC, а в любом часовом поясе, в котором они размещены.

  3. Возможно ли, что демон работает под учетной записью пользователя с другой переменной среды TZ (или другой локалью)? http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...