升级Ruby 3.0.0至3.1.0时出现Time::RFC2822_DAY_NAME未初始化常量错误
解决Ruby 3.1.0升级后
Time::RFC2822_DAY_NAM未初始化的错误 问题原因
这个错误是由于Ruby 3.1.x对Time类的内置常量做了调整,而你使用的business_time gem版本不兼容Ruby 3.1,导致内部尝试调用未定义的Time::RFC2822_DAY_NAME(报错信息里的DAY_NAM是拼写遗漏)。
解决方案
1. 升级business_time gem(推荐)
这是最根本的解决办法,确保gem版本支持Ruby 3.1:
- 打开
Gemfile,将business_time的版本更新为最新兼容版 - 执行命令:
bundle update business_time
2. 手动补全缺失常量(临时修复)
如果暂时无法升级gem,可以在Rails项目的初始化文件中手动定义该常量:
- 在
config/initializers目录下新建time_constants.rb文件 - 添加以下代码:
# 补全Ruby 3.1中移除的Time常量,兼容business_time旧版本 Time::RFC2822_DAY_NAME = Date::DAYNAMES unless defined?(Time::RFC2822_DAY_NAME) - 重启Rails服务器,验证功能是否恢复正常
3. 检查代码中的间接引用
确认你的业务代码中没有直接或间接调用Time::RFC2822_DAY_NAME的逻辑,若有则替换为Date::DAYNAMES(两者内容一致)。
内容的提问来源于stack exchange,提问作者Mansi Shah
相关产品推荐
相关产品推荐

