升级Rails/Ruby后‘US/Eastern’时区失效问题求助
问题原因及解决办法
核心原因
US/Eastern属于旧的非标准时区别名,Ruby 3.3搭配的新版tzinfo库(Rails 7.2依赖的版本更高)已不再支持这类别名,标准的IANA时区ID应为America/New_York。早期Rails和Ruby版本的tzinfo兼容这些旧别名,升级后该兼容逻辑被移除。
回退后仍报错的原因
- tzinfo版本未同步回滚:回退Rails到7.0.8.6时,若Gemfile.lock仍保留高版本tzinfo,执行
bundle install --redownload也不会自动降级到Rails 7.0适配的tzinfo版本,新的tzinfo依然不识别旧别名。 - Ruby环境缓存残留:通过asdf切换Ruby版本后,可能残留全局gem的缓存数据,导致系统仍使用新的时区规则解析。
解决办法
- 替换为标准时区ID:将代码中所有
US/Eastern替换为America/New_York,这是官方标准时区标识,全版本兼容。 - 强制指定tzinfo版本:在Gemfile中添加
gem 'tzinfo', '~> 2.0.6'(该版本适配Rails 7.0.8.6),执行bundle update tzinfo后重新bundle install。 - 刷新Ruby环境:运行
asdf reshim ruby 3.2.2,确保当前Ruby版本的gem依赖完全生效。
内容的提问来源于stack exchange,提问作者fsi
相关产品推荐
相关产品推荐

