Ionic Appflow构建报找不到指定版本Bundler 如何让其不使用项目自带Gemfile
问题根因
本地用Gemfile集成管理fastlane时,生成的Gemfile、Gemfile.lock提交到代码仓库后,Ionic Appflow的构建环境会自动扫描项目根目录下的Ruby相关配置,强制按照你本地锁定的bundler、fastlane版本执行它自带的构建流程,和Appflow沙箱预装的fastlane环境版本不兼容时,就会触发日志中记录的bundler版本缺失报错。
无侵入式可行解决方案
所有方案都不需要在提交代码前手动重命名、修改文件,也不会破坏本地Gemfile对fastlane的版本管理作用:
- 通过Appflow自定义前置构建步骤,隔离项目内的Gemfile配置
在对应构建的配置项中新增Shell类型的自定义构建步骤,安排在Appflow内置的fetch-updates、build-app步骤之前执行,脚本把项目根目录下的本地Ruby配置临时移到系统临时路径:
构建结束后沙箱会自动销毁,所有临时操作全部清理,完全不影响本地开发流程。# 仅在Appflow隔离的构建沙箱内操作,不会改动仓库内的正式源文件 mkdir -p /tmp/Appflow_build_temp mv $APP_PROJECT_ROOT/Gemfile /tmp/Appflow_build_temp/Gemfile mv $APP_PROJECT_ROOT/Gemfile.lock /tmp/Appflow_build_temp/Gemfile.lock - 配置环境变量强制Bundler跳过项目目录的Gemfile加载
同样通过前置自定义步骤设置全局环境变量,关闭Bundler自动检索项目路径下Gemfile的逻辑:
设置完成后,Appflow内置的fastlane流程会直接调用沙箱预装的全局fastlane环境,完全不会读取项目内为本地开发配置的Gemfile依赖。# 强制Bundler不加载项目目录下的自定义Gemfile配置 export BUNDLE_GEMFILE="" - 对齐Appflow沙箱的bundler版本,从根源消除版本不兼容
如果不想做文件隔离,可直接把本地Gemfile锁定的bundler版本调整为和Appflow沙箱兼容的版本:- 参考报错日志里的Ruby环境路径,将
Gemfile.lock里声明的bundler版本调整为Appflow沙箱预装的对应兼容版本 - 本地重新执行
bundle install生成新的Gemfile.lock提交,构建时就不会触发依赖缺失报错
- 参考报错日志里的Ruby环境路径,将
注意事项
- 不要通过
.gitignore屏蔽项目下的Gemfile/Gemfile.lock,否则会失去Gemfile对fastlane依赖的版本锁定作用,导致团队成员本地开发时出现fastlane版本不一致的问题。 - 前面提到的自定义步骤操作全部在Appflow的隔离构建沙箱内生效,不存在长期维护成本,不需要每次提交时做特殊处理。
内容的提问来源于stack exchange,提问作者BossmanT
相关产品推荐
相关产品推荐

