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

Heroku中KeystoneJS后端触发Next.js前端构建失败求助

解决方案

核心问题:认证方式错误

你用GitHub Access Token请求Heroku API是错误的——Heroku API的认证需要Heroku自身的API密钥,而非GitHub的Token。这就是为什么你直接调用GitHub API下载tarball能成功,但Heroku API返回未授权的原因。

步骤1:获取Heroku API密钥

  • 登录Heroku账户,进入「Account Settings」页面,在「API Key」部分复制密钥;
  • 或在本地终端执行heroku auth:token命令,生成临时认证Token(有效期较短)。

步骤2:修改API请求代码

将请求头的Authorization字段替换为Heroku API密钥,注意前缀是Bearer而非token:

await heroku.post(`/apps/${process.env.HEROKU_APP_ID}/builds`, {
  headers: {
    'Content-Type': 'application/json',
    Accept: 'application/vnd.heroku+json; version=3',
    Authorization: `Bearer ${process.env.HEROKU_API_KEY}`, // 替换为Heroku API密钥
  },
  body: {
    source_blob: {
      url: `https://api.github.com/repos/${repoOwner}/${repoName}/tarball/${branchName}`,
      // 可选:如果Heroku拉取GitHub仓库时权限不足,可添加该字段
      // github_token: process.env.GITHUB_PERSONAL_ACCESS_TOKEN
    },
  },
});

步骤3:验证Heroku与GitHub的连接有效性

如果修改后仍报错,检查:

  • Heroku前端应用的GitHub集成是否正常:进入Heroku应用的「Deploy」页面,确认GitHub仓库已关联,且Heroku有权限访问该私有仓库;
  • GitHub Access Token的权限:确保Token拥有repo权限(因为是私有仓库)。

备选方案:触发GitHub Actions部署(如果适用)

如果你的前端是通过GitHub Actions部署到Heroku的,可直接调用GitHub API触发对应的Workflow:

await fetch(`https://api.github.com/repos/${repoOwner}/${repoName}/actions/workflows/{WORKFLOW_FILE_NAME}/dispatches`, {
  method: 'POST',
  headers: {
    'Authorization': `token ${process.env.GITHUB_PERSONAL_ACCESS_TOKEN}`,
    'Accept': 'application/vnd.github.v3+json',
  },
  body: JSON.stringify({
    ref: branchName
  })
});

这种方式不依赖Heroku API,直接通过GitHub触发部署流程,更适配前后端分离场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:24:52