Rails 5.2.3出现active_support uninitialized constant I18n错误如何解决
问题原因
- 项目
lib目录下存在自定义的i18n.rb文件:由于你配置了config.autoload_paths包含lib目录,active_support加载时执行require "i18n"会优先加载项目内的这个文件,而非i18n gem的入口文件,导致I18n模块未定义,触发NameError,这是该类问题的最高发诱因 - Bundler 2.2.31存在已知的gem加载路径优先级异常bug,会导致依赖gem的加载顺序错乱,i18n gem的入口没有被正确加载
- 极少数情况为i18n gem安装损坏,文件不完整
解决方案
- 第一步:排查项目根目录、
lib/、config/initializers/目录下是否存在名为i18n.rb的自定义文件,若存在,将其重命名为不冲突的名称(比如i18n_config.rb),重启服务测试 - 第二步:如果第一步操作后问题未解决,降级Bundler版本到之前正常使用的2.2.29:
执行以下命令:
完成后重启服务测试gem install bundler:2.2.29 bundle _2.2.29_ install - 第三步:如果前两步都无效,重新安装i18n gem:
gem uninstall i18n -v 1.8.11 bundle install - 临时应急方案:若无需调整现有配置,可在
config/boot.rb文件最顶部手动引入i18n gem:
强制提前加载i18n gem的核心模块,绕过加载顺序问题require 'i18n' - 可选方案(完全不需要国际化功能时使用):将
application.rb中的require 'rails/all'替换为逐个加载需要的框架组件,跳过i18n加载:require "rails" # 按需保留需要的框架,移除不需要的组件,无需引入i18n相关内容 require "active_model/railtie" require "active_job/railtie" require "active_record/railtie" require "action_controller/railtie" require "action_mailer/railtie" require "action_view/railtie" require "sprockets/railtie"
内容的提问来源于stack exchange,提问作者Lloydo
相关产品推荐
相关产品推荐

