RoR 6.X 执行 assets:precompile 因初始化文件报错该如何解决?
Rails 6.X 预编译静态资源跳过无关初始化文件的解决方案
Rails 5.1之后官方已经移除config.assets.initialize_on_precompile配置项,默认预编译资产时会加载完整应用环境,因此会触发config/initializers下所有脚本的执行,你可以选择以下任意一种方案解决问题:
- 方案一:给对应初始化文件增加预编译场景判断
在连接第三方API的初始化文件开头添加如下代码,预编译时会直接跳过整个文件的执行:# config/initializers/your_third_party_api.rb 开头新增 return if ENV["RAILS_ASSETS_PRECOMPILE"] # 原有初始化逻辑保持不变 - 方案二:执行预编译命令时传入占位API密钥
预编译阶段不会实际调用第三方API,直接传入任意占位值满足初始化校验即可,命令格式如下(将YOUR_API_KEY替换为你实际缺失的环境变量名):YOUR_API_KEY=dummy_value bundle exec rails assets:precompile - 方案三:修改第三方API的初始化逻辑为懒加载
把原本写在initializer里的API连接、校验逻辑,移动到实际调用API的业务代码中(比如对应的Service类内部),仅在第一次调用时才初始化配置,应用启动、资产预编译阶段都不会触发相关逻辑。
内容的提问来源于stack exchange,提问作者Yann PRONO
相关产品推荐
相关产品推荐

