Как TimeZone по умолчанию становится установленным в ActiveSupport?
Вот то, что происходит:
irb -r 'rubygems'
ruby-1.8.7-p174 > require 'active_support'
ruby-1.8.7-p174 > require 'active_support/time_with_zone'
ruby-1.8.7-p174 > Time.zone
ruby-1.8.7-p174 > nil
Как я устанавливаю это на текущее местоположение по умолчанию?
в rails он устанавливается в environment.rb через инициализатор rails
Rails::Initializer.run do |config|
config.time_zone = 'Pacific Time (US & Canada)'
# ...
Я только что провел тест и когда config.time_zone закомментирован Time.zone также возвращает nil в проекте rails; так что я думаю, что нет "по умолчанию", он просто устанавливается в инициализаторах
Полагаю, вы уже знаете, что это будет "работать"?
irb -r 'rubygems'
ruby-1.8.7-p174 > require 'active_support'
ruby-1.8.7-p174 > require 'active_support/time_with_zone'
ruby-1.8.7-p174 > Time.zone
ruby-1.8.7-p174 > nil
ruby-1.8.7-p174 > Time.zone = 'Pacific Time (US & Canada)'
ruby-1.8.7-p174 > Time.zone
=> #<ActiveSupport::TimeZone:0x1215a10 @utc_offset=-28800, @current_period=nil, @name="Pacific Time (US & Canada)", @tzinfo=#<TZInfo::DataTimezone: America/Los_Angeles>>
Примечание: приведенный выше код использует rails 2.2.2. Возможно, в более новых версиях все иначе?
Примечание редакторов: В rails >= 3.0 все monkey-патчи были перемещены в пространство имен core_ext
, поэтому вышеприведенный require не расширяет Time
. Для более поздних версий ActiveSupport
используйте следующее:
require 'active_support/core_ext/time/zones'