You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac M1部署Rails项目到Heroku报Exec format错误如何解决?

问题根因

你遇到的Exec format error错误本质是可执行文件架构和运行环境架构不匹配:

  • Heroku容器运行环境为linux/amd64架构,而你的Mac M1是arm64架构,构建镜像时相关配置存在疏漏,导致最终打包的镜像内包含arm64架构的二进制文件,在Heroku的amd64环境无法正常运行
  • 即使你在build命令加了--platform linux/amd64参数,也存在三个常见疏漏:
    • 本地Docker未初始化支持跨架构构建的buildx实例,参数仅打了架构标识标签,实际镜像内容仍是arm64架构
    • Dockerfile未指定基础镜像的架构,默认拉取适配M1的arm64版ruby镜像
    • Gemfile.lock中缺少x86_64-linux平台的适配信息,bundle install时编译的原生gem扩展为arm64架构
修复步骤
  1. 执行以下命令初始化支持跨架构构建的buildx实例:
docker buildx create --use
  1. 给你的Gemfile.lock添加linux amd64平台支持,在项目根目录执行:
bundle lock --add-platform x86_64-linux
  1. 修改Dockerfile的基础镜像配置,明确指定拉取amd64版本的ruby镜像:
# 把原第一行FROM替换为下面的内容
FROM --platform=linux/amd64 ruby:3.0.2
  1. 调整构建发布流程,合并构建和推送步骤,避免本地缓存的旧arm架构镜像被误推送:
docker buildx build --platform linux/amd64 -t registry.heroku.com/myweb/web --push .
heroku container:release web -a myweb
  1. 若仍报错,可在构建命令后加--no-cache参数清除缓存重新构建,同时检查entrypoint.sh的换行符是否为Unix格式的LF,避免Windows格式的CRLF导致执行异常。

注:你本地的docker-compose.yml是开发环境配置,和Heroku部署无关,无需修改。

内容的提问来源于stack exchange,提问作者TamTam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:57:03