(使用Rails 3.2.20,ruby 1.9.3)
在我的网站制作中,#(GMT-05:00)EST'选项意外地包含在time_zone_select
下拉列表中:
ActiveSupport::TimeZone::MAPPING
中不存在此时区。注入ActiveSupport::TimeZone.zones_map
:
def zones_map
@zones_map ||= begin
new_zones_names = MAPPING.keys - lazy_zones_map.keys
new_zones = Hash[new_zones_names.map { |place| [place, create(place)] }]
lazy_zones_map.merge(new_zones)
end
end
在lazy_zones_map.merge(new_zones)
行上因为lazy_zones_map
包含" EST"区。
在我的开发框上不会发生这种情况,并且在我的Rails生产控制台中不会发生:ActiveSupport::TimeZone.send :lazy_zones_map
会返回{"UTC"=>(GMT+00:00) UTC}
。
但是当我在生产中加入我的观点时
<%= ActiveSupport::TimeZone.send :lazy_zones_map %>
我得到{"UTC"=>(GMT+00:00) UTC, "EST"=>(GMT-05:00) EST}
。我不明白为什么会发生这种想法?
def lazy_zones_map
require_tzinfo
@lazy_zones_map ||= Hash.new do |hash, place|
hash[place] = create(place) if MAPPING.has_key?(place)
end
end
编辑:在生产和开发中使用相同版本的tzinfo,0.3.44(我已使用命令Gem.loaded_specs["tzinfo"]
检查过)。