Ruby Enterprise Edition выдает Time.now в неверном формате - PullRequest
0 голосов
/ 12 мая 2011

На моем VPS (Ubuntu 10.04LTS) у меня через RVM установлены ree-1.8.7-2011.03 и ruby-1.9.2-p180. Моя проблема в том, что когда я вызываю Time.now в ree-1.8.7 (irb), я получаю Thu May 12 12:16:50 +0200 2011, когда я делаю то же самое в ruby-1.9.2 (irb), я получаю 2011-05-12 12:17:44 +0200.

Проблема в том, что повторная версия даты неприменима в моих запросах rails (сгенерированный SQL просто сломан). Форматирование времени с использованием strftime в каждом отдельном запросе на данный момент не вариант, и ни один из них не переключается на 1.9.2, поэтому мне нужна ваша помощь, чтобы выяснить, почему это происходит, и исправить это.

Спасибо за любую помощь!

Ответы [ 2 ]

7 голосов
/ 12 мая 2011

Это не проблема REE. Ruby 1.9.2 изменяет формат по умолчанию для Time # на_s.

$ rvm use 1.8.7
ruby-1.8.7-p334 :001 > Time.now
# => Thu May 12 12:42:35 +0200 2011 

$ rvm use 1.9.2
ruby-1.9.2-p180 :001 > Time.now
# => 2011-05-12 12:42:44 +0200 

Рекомендуется никогда не полагаться на формат Time # to_s по умолчанию, но всегда использовать пользовательский помощник или метод для форматирования вывода даты, в противном случае вы не можете контролировать отображение информации.

Форматирование времени с использованием strftime в каждом отдельном запросе на данный момент недоступно

Мало того, что это должен быть вариант, это должен был быть ваш первый выбор. Я настоятельно рекомендую вам исправить существующий код, чтобы использовать пользовательский метод форматирования.

Временным обходным решением будет переопределение метода Ruby 1.8.7 Time # to_s для использования пользовательского формата. Однако внесение такого изменения может привести к поломке других библиотек.

3 голосов
/ 12 мая 2011

Как примерно так в вашем config / initializers / app.rb

Time::DATE_FORMATS[:default] = "Your preferred date format"
...