我升級大了,老了,笨重的Rails應用程序的紅寶石(大多時候是這樣,我沒有在我重新格式化重新安裝REE筆記本電腦),我受到時區問題的困擾。基本上,拉動了日期時間的數據庫是不正確它們轉換爲本地時間:Ruby on Rails的升級(自1.8.7)3.0.20應用程序引起的時區怪事
新系統 - 紅寶石2.1.2,Ubuntu的14.04
>> Time.zone.name
=> "Central Time (US & Canada)"
>> ActiveRecord::Base.time_zone_aware_attributes
=> true
>> ActiveRecord::Base.default_timezone
=> :utc
>> Transaction.last.created_at
=> 2014-07-15 02:09:02 UTC
>> Transaction.last.created_at_before_type_cast
=> 2014-07-15 02:09:02 UTC
>> Transaction.last.created_at.localtime
=> 2014-07-14 21:09:02 -0500
>> exit
$ date
Mon Jul 14 22:27:50 CDT 2014
舊系統 - REE,Ubuntu的12.04
>> Transaction.last.created_at
=> Mon, 14 Jul 2014 22:03:11 CDT -05:00
>> Transaction.last.created_at_before_type_cast
=> Tue Jul 15 03:03:11 UTC 2014
>> Transaction.last.created_at.localtime
=> Mon Jul 14 22:03:11 -0500 2014
正如你所看到的,我保證time_zone_aware_attributes
設置,該區域設置(我將它設置在environment.rb中),和ActiveRecord的是以UTC(如預期)存儲時間。我很難過這個。有人有主意嗎?
更新
before :all do
@current_tz = Time.zone
Time.zone = 'Pacific Time (US & Canada)'
end
after :all do
Time.zone = @current_tz
end
it 'should report time as Pacific time' do
shift = FactoryGirl.create(:shift)
new_obj = Transaction.create(shift: shift, time: DateTime.new(2013, 3, 31, 0, 0, 0, 0), amount: 0)
new_obj.reload
I18n.localize(new_obj.time, format: :timeonly).should_not == '12:00 am' #We created it with a UTC date, but it should get I18n'd to Pacific time
end
#en.yml
time:
formats:
timeonly: "%l:%M %p"
上述測試是也失敗。 I18n的東西似乎完全破碎。
更新2
我似乎已經分離出的問題1.9.3 - > 2.1。我想用1.9.3很好,我想我會在新服務器上運行它,直到升級Rails。傷心。我仍然喜歡聽到關於修復的任何建議。
我有軌4.0跑紅寶石2.1代碼和Th輸出e18n的東西是5點。也許軌道3.0.x和紅寶石2.1之間的不兼容?這是用Ruby 2.0完全兼容軌道的最早版本是像3.2.16,所以如果有一些事情是當你把在軌破3.0與2.1紅寶石正確 –
我也不會感到驚訝大規模。有幾個補丁(我不得不使用AR協會被破壞)來嘗試使它們兼容,但是這個補丁非常令人驚訝。將項目從3.0升級到3.2(或4)並不是我現在有時間的事情......所以我放棄了讓它在Ruby 2上運行的目標。=)謝謝! – alkaloids