Rails 7应用部署Google Cloud App Engine失败,求助修改部署步骤
解决Rails 7部署到App Engine时的Bundler平台不兼容问题
快速解决方法(本地预处理)
直接在本地项目根目录执行以下命令,更新Gemfile.lock后再部署:
bundle lock --add-platform x86_64-linux
提交更新后的Gemfile.lock到版本控制(如果使用Git),然后重新运行:
gcloud app deploy
彻底解决(自定义构建流程,同时修复Bundler过时参数警告)
报错中还提到--deployment和--without参数已过时,可通过自定义Cloud Build流程替换默认构建步骤:
- 在项目根目录创建
cloudbuild.yaml文件,写入以下内容:
steps: - name: 'gcr.io/cloud-builders/ruby' args: ['bundle', 'config', 'set', '--local', 'deployment', 'true'] - name: 'gcr.io/cloud-builders/ruby' args: ['bundle', 'config', 'set', '--local', 'without', 'development test'] - name: 'gcr.io/cloud-builders/ruby' args: ['bundle', 'lock', '--add-platform', 'x86_64-linux'] - name: 'gcr.io/cloud-builders/ruby' args: ['bundle', 'install'] - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/rails-app', '.'] images: - 'gcr.io/$PROJECT_ID/rails-app'
- 使用自定义构建文件执行部署:
gcloud app deploy --cloud-build-file=cloudbuild.yaml
问题原因
- 你的
Gemfile.lock是在macOS(x86_64-darwin-23)环境生成的,仅包含该平台的依赖信息,但App Engine的构建环境是Linux(x86_64-linux),导致依赖不兼容。 - Bundler新版本已弃用
--deployment和--without命令行参数,要求通过bundle config set设置本地配置,避免跨调用的状态依赖。
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

