Heroku和GitHub:“无法检索项目,内部服务器错误”

259
我想要连接我的GitHub账户。当我进行连接时,在页面右上角会出现一个小红色弹出窗口,显示以下错误信息:

无法检索到项,内部服务器错误。


7
奇怪的是,大约一小时前我遇到了这个错误,但是当我查看我的电子邮件时,我收到了通知:「已向您的帐户添加了第三方 OAuth 应用程序」。也许我碰巧赶上了修复的边缘? - Carcigenicate
4
https://status.heroku.com/incidents/2413 - kͩeͣmͮpͥ ͩ
1
@Carcigenicate 我今天也看到了同样的事情,但是从Heroku方面仍然没有Github集成。我认为这个问题还没有解决。 - Peter
Heroku报告GitHub集成再次可用。有关详细信息,请参阅我的答案和/或更新的Heroku事故跟踪页面。 - Chris
12个回答

180
截至2022年5月25日19:52 UTC,GitHub集成已重新启用

我们很高兴地宣布GitHub集成已重新启用!您现在可以使用新生成的令牌重新连接GitHub,并恢复Heroku管道功能(包括Review Apps)。

您可以立即连接到GitHub,或者按照这篇博客文章中描述的增强集成等待。要立即重新建立您的GitHub连接,请按照这些说明

以下是有关“增强集成”的博客文章中的内容:

为了改进集成的安全模型,我们正在与GitHub合作探索其他增强功能,其中包括转移至GitHub Apps以获得更细粒度的权限,并启用RFC8705以更好地保护OAuth令牌。由于这些增强功能需要Heroku和GitHub共同进行更改,因此随着参与的发展,我们将发布更多信息。

没有提及增强集成的可用性时间表。


在2022年4月15日至5月25日期间,由于Heroku在调查安全漏洞,禁用了Heroku的GitHub集成功能。在此期间,通过其他方式仍然可以进行部署,特别是通过git push
为减轻潜在受损OAuth令牌的影响,我们将在接下来的几个小时内撤销所有现有的Heroku GitHub集成令牌,并阻止创建新的OAuth令牌直至另行通知。您的GitHub存储库不会受到此操作的任何影响。 由于移除Heroku-GitHub集成,哪些Heroku功能变得无法使用?
  • 启用评审应用
  • 创建(自动和手动)评审应用
  • 部署(自动和手动)评审应用
  • 从GitHub部署应用程序(手动或自动)
  • Heroku CI 无法创建新运行(自动或手动)或查看GitHub分支列表
  • Heroku Button:无法从私有存储库创建按钮应用程序
  • ChatOps:无法部署或获取部署通知
  • 任何具有GitHub集成的应用程序都可能受到此问题的影响。要解决特定的集成问题,请向Heroku支持团队提交案例

从GitHub部署迁移到Git部署

在2022年4月21日23:53 UTC,Heroku提供了有关从GitHub部署迁移到基于Git的部署的扩展指南:
尽管我们的客户仍无法通过Heroku控制面板重新连接到GitHub,但我们想分享一些以前提供的代码部署方法的补充。要了解如何将您的部署方法从GitHub更改为Heroku Git,请参阅以下帮助文章:如何切换部署方法,从GitHub切换到Heroku Git,并使GitHub库中的所有更改/应用程序代码可用

4
我无法将代码推送到Heroku,所以我来这里寻找答案。当我运行 heroku git:clone -a 应用名称 命令时,它告诉我 "warning: You appear to have cloned an empty repository."(警告:你似乎克隆了一个空的代码库) - Bus42
3
不要从Heroku进行克隆。如果您从未直接将代码推送到Heroku,则会得到一个空仓库。如果您已有本地副本,请使用现有的本地副本。如果因为某种原因需要克隆,请从GitHub进行克隆。 - Chris
4
@Bus42,我不确定你所指的指令是什么,但是从Heroku克隆应用程序从未被推荐为常规工作流程的一部分(https://devcenter.heroku.com/articles/git-clone-heroku-app):“Heroku应用程序的Git存储库仅用于部署目的。从此存储库克隆不是一项官方支持的功能,只应作为最后的手段尝试。**请勿**将此存储库用作您的应用程序的基本“origin”存储库。相反,使用您自己的Git服务器或版本控制服务,例如GitHub。” - Chris
“我无法推送到Heroku”是什么意思?考虑发布一个关于你看到的任何错误的问题。如果在此之前你可以将代码推送到GitHub并且Heroku也能够部署,那么现在你应该能够将代码推送到Heroku了。 - Chris
GitHub 集成在我的本地机器上未正确配置。我必须使用 heroku git:remote -a <name-of-app> 添加远程主机,然后才能使用 git push heroku main 进行部署,并使用 heroku logs -a <name-of-app> 验证部署。说实话,我不记得从哪里得到了尝试从 Heroku 克隆的想法——可能是从已删除的注释中得到的。我必须说,我在 Heroku 上遇到了比 Firebase 或 Vercel 更多的安全和登录问题。 - Bus42
在 rebase 和 push force 之后,我试图再次推送,并且出现了错误:Updates were rejected because a pushed branch tip is behind its remote counterpart。据我所见,由于基础分支的更改(即 rebase 的原因...),推送被拒绝,因为基础分支也应该推送到 Heroku 上(而不仅仅是 Github),然后我们可以使用 git push heroku <branch-to-deploy>:main -f 再次推送当前分支。 - Malka P

113

这是由于他们状态门户报告的问题,在此处

目前的解决方案是使用另一种推送策略。

目前最好的方法是使用Heroku CLI中的远程(remote)。操作步骤如下:

1. 如果还没有安装,请安装Heroku CLI。

有关安装和设置的更多信息可以在此处获取。

2. 使用heroku login命令进行登录。

您将在默认浏览器窗口中收到提示,以完成在Heroku Portal上的登录。

3. 假设您已经在Heroku上设置了应用程序(如果没有,请按照此处说明操作),您只需使用Heroku CLI为Git存储库添加新的远程即可。

运行heroku git:remote -a example-app - 用您的应用程序名称替换“example-app”。

4. 运行git remote -v检查是否已成功设置远程。

您应该看到类似于以下内容的响应:

heroku  https://git.heroku.com/your-app-name.git (fetch)
heroku  https://git.heroku.com/your-app-name.git (push)

5. 将你的分支推送到新的heroku远程地址

git push heroku 你的分支名称

6. 在终端中可以看到你的部署进度


本答案的参考资料来自这里,如果需要更多信息,请参考该链接。


4
谢谢您的回答。 如果您的本地分支与主分支(main)或主版本(master)不同,您可能会遇到“remote: Pushed to branch other than [main, master], skipping build.”错误。 在这种情况下,请运行:“git push heroku 您的分支名:main”。 此命令将您的分支名推送到heroku远程的主分支。因此,只有在了解该命令功能的情况下才使用它。 - Furkan Yavuz
"heroku login" 命令显示 "IP 地址不匹配" 页面... 我认为直接推送到 Heroku 不再是一个选项了... 有人有猜测吗? - Beki
对我有用(2022年4月26日上午10:28),感谢您的帮助。希望它能很快解决。 - T.script
如果这对你有用,现在你可能会发现自己需要维护两个仓库。你可能会将更改从一个文件夹复制到另一个文件夹。我发现使用“创建补丁序列”然后“应用补丁序列”非常有用。 - Zane Chung
非常感谢您的答案,我只想在 步骤 5 中提醒一下,如果出现错误:error: src refspec origin does not match any,则应使用以下命令:git push heroku - Ali
@Beki try heroku login -i - michael_vons

9
我处于同样的情况,正如其他人所说,这是由于Heroku安全问题造成的。与此同时,您可以使用Heroku CLI来部署您的代码。
因此,在Heroku Web仪表板上,选择Heroku Git:

Deploy with Heroku CLI

然后使用heroku login命令设置Heroku CLI。

最后,如果您的代码库已经存在于GitHub上,您需要运行以下命令添加新的远程:

heroku git:remote -a your_app_name
git push heroku master

你可以在官方文档中找到更多关于这个解决方案的信息。

6

这只是一个临时的问题,关于此问题的更多细节请参见这里

您可以同时将代码推送到 GitHub 和 Heroku,以获得临时解决方案:

git push -u origin <branch>
git push heroku <branch>

2
你可能不想同时使用-u。[-u / --set-upstream]设置上游分支,这样你就可以执行像git pushgit pull这样的操作而不需要指定远程。如果你对main运行这些操作,你只会来回切换。 - Chris
@Chris,谢谢你的提示!我不知道这个,通常我只是复制和粘贴执行工作的命令(:),但这肯定是一个有用的提示。 - BR19_so

4

我看到之前的回答了,但是由于我在审查应用(PR 应用程序)方面遇到了问题,大多数情况下你会与不同的分支一起工作,所以这里提供了一种解决方案,可以将除主分支之外的东西推送到 Heroku。

首先确保你的远程源设置正确

heroku git:remote -a your_awesome_app

你也可以通过运行 git remote -v 命令进行确认,你应该会看到你的 origin 指向你的 Heroku 应用。

git remote -v

heroku    https://git.heroku.com/your_awesome_app.git (fetch)

这里的origin名称是heroku

如果您想要从main分支部署更改

git push heroku main

如果你想要将你的更改从特性分支(非主分支*main)推送到Heroku

那么请使用以下命令将你的特性分支推送到Heroku:

git push heroku feature:main
  • heroku - 是您的源名称(使用git remote -v确认您的源名称)
  • feature - 是您当前的分支,不同于主分支main/master(使用git branchgit status检查您的分支名称)

4

如果您正在使用此集成进行部署,请使用此处的Heroku GitHub操作进行部署:

部署到Heroku

这样,您就不必对部署工作流程进行重大更改。


2

我有同样的问题。我已经安装了cli。

git remote

输出:

heroku
origin

git remote -v

输出:

heroku  https://git.heroku.com/YOUR-APP.git (fetch)
heroku  https://git.heroku.com/YOUR-APP.git (push)
origin  https://github.com/GitUserName/yourRepo.git (fetch)
origin  https://github.com/GitUserName/yourRepo.git (push)

如果您的分支名为main,请使用Git分支进行验证。例如,您可以执行以下操作:

git push heroku main

对我而言,这是

git push heroku master

现在将您的本地更改推送到远程。
git push heroku master

输出:

To https://git.heroku.com/YOUR-APP.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://git.heroku.com/YOUR-APP.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我不在意它与远程的不同。我一直在本地开发,并没有意识到自动Git部署失败了。我关心的是本地的更改:

git push heroku master -f

现在部署的应用程序正在按预期工作。


1
如果您在尝试推送时遇到错误,可能是因为开发和部署具有不同的分支名称。这种情况下,请按照以下说明操作;

If you are developing on a branch and deploying via Git you must run:

   git push heroku <branchname you're developing on>:<branch you're deploying from>
本文详细介绍了以下行为:

检测到重复的构建版本


你引用的内容是从哪里来的?它不是列出的来源。是来自这个问题吗?还是来自某个屏幕输出?你能在你的回答中详细说明吗?请通过编辑(更改)你的回答来回复,而不是在评论区回复(不要加上“编辑:”,“更新:”或类似的字眼 - 回答应该看起来像是今天写的)。 - Peter Mortensen
不确定我理解你的评论@PeterMortensen。请用简单的语言解释一下。 - codeSapience

1

以下是我在Heroku上使用的简单工作模式。这旨在帮助那些之前没有经历过此过程的人。我之前曾使用过它(2014-5),昨晚又不得不重新设置它以进行推送。

首先添加Heroku远程:

git remote add heroku https://git.heroku.com/YOUR-APP.git

由于GitHub通常是“origin”(git push origin ...),因此这会添加另一个远程目的地,“heroku”(git push heroku ...)。
git remote

输出:

heroku
origin

我的代码/git/pushing模式:

  1. 本地开发与以往相同。将内容推送到 GitHub,合并,没有任何变化。
  2. 按照 @a-chris 的说明将您的部署设置为 "Heroku git"。
  3. 要推送到 Heroku,只需将正确的分支推送到新添加的 "heroku" 远程源。我使用 --force 选项来消除任何冲突可能性。除非您之前一直在使用 Heroku Git 和分支,否则通常只会有一个分支 - 一般使用 "master" 分支。

这将触发部署。您可以在仪表板上和终端中查看或审核。把新的 "heroku" 源视为一个目录来转储代码,而不是保留历史记录等存储库。在这个特定的模式中,它是一个二等公民。

现在我从本地终端推送,而不是通过自动部署或仪表板按钮。如果您的组织很大,我建议控制访问权限。许多开发人员可能没有经验来处理多个目标存储库或捕捉意外推送。

要触发本地推送,请确保您的主分支(或其他分支)已更新...监视您的提交哈希值!

这将为您提供关注诸如BR19_so和其他人的建议的设置。


1

Henrique Aron的回答适用于本地机器。

对于远程SSH服务器,您将面临一个IP不匹配错误。

要解决这个问题:

  1. 登录Heroku网站

  2. 进入帐户设置

  3. 面板中显示API密钥

  4. 在服务器CLI中,键入heroku login -i

  5. 输入电子邮件,使用API密钥作为密码,然后您可以按照Git远程推送的其余步骤进行操作


我已经更新了一些东西,但是当我进行部署时,Heroku仍然显示everything-is-uptodate,尽管我已经进行了更改并推送了它们。 - Rohan Devaki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接