Существует ли скрипт ruby ​​или гем для исправления ошибок часовых поясов в приложении rails? - PullRequest
1 голос
/ 02 декабря 2011

В настоящее время я работаю с приложением rails 3.0.x, которое недавно было обновлено с rails 2.x.Недавно было обнаружено, что наши метки времени в MySQL изменились с записи в смещении часового пояса PST на смещение UTC в результате этой миграции.

После изучения проблемы было решено, что мы хотим сохранить все нашиметки времени в формате UTC в будущем.К сожалению, нам нужно просмотреть все наши старые записи с временными метками в PST и преобразовать их в UTC (довольно сложный процесс).Я бы предпочел не изобретать колесо, если это вообще возможно, что приводит меня к моему вопросу:

Кто-нибудь написал утилиту для обработки преобразования временных меток PST в UTC для базы данных MySQL?

1 Ответ

1 голос
/ 02 декабря 2011

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

Что вы можете сделать, это записать значения id, в которых произошел переход, а затем отрегулировать все отметки времени до этого интервала с помощью CONVERT_TZ() метод в MySQL.

Это будет выглядеть примерно так для каждой таблицы:

# List of maximum ID to adjust
max_id = {
  'examples' => 100,
}
c = ActiveRecord::Base.connection

c.tables.each do |table|
  # Set your specific time-zones as required, PST used as an example here.
  timestamp_updates = c.columns(table).select do |col|
    col.type == :datetime
  end.collect(&:name).collect do |col|
    "`#{col}`=CONVERT_TZ(`#{col}`, 'PST', 'UTC')"
  end

  next if (timestamp_updates.empty?)

  c.execute("UPDATE `#{table}` SET #{timestamp_updates.join(',') WHERE id<=%d" % max_id[table])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...