远程拒绝了主分支 -> 主分支 (pre-receive hook被拒绝)。

85

我正在使用 Rails 3.2,并尝试将代码推送到 Heroku 时遇到了错误:

 git push heroku master
Counting objects: 496, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (435/435), done.
Writing objects: 100% (496/496), 5.17 MiB | 249 KiB/s, done.
Total 496 (delta 125), reused 216 (delta 8)

-----> Heroku receiving push
-----> Removing .DS_Store files
 !     Heroku push rejected, no Cedar-supported app detected

To git@heroku.com:lumeo.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:lumeo.git'

我尝试了论坛上推荐的几种方法,包括清空和重新安装 Gem,删除和添加远程,但都没有成功。

有什么建议吗?


重新初始化仓库对我有用,详情请见:https://dev59.com/4mox5IYBdhLWcg3wSCbk - Dan Klos
29个回答

29

确保您的Rails应用程序位于仓库的根目录中,Gemfile存在且命名正确。如果无法将您的代码库检测为支持的项目类型之一,它基本上无法正常工作。此外,即使您拥有适当的项目,也请确保它是存储库的一部分,并且已经提交正确(git status将在这里帮助您,ls应该可以帮助您验证项目结构)。


在我的世界里,我使用了额外的逗号来部署 package.json。(#nodejs,#ember-cli) - sam
我还没有将所有的更改提交到远程仓库。 - Sheece Gardazi
我在Nodejs项目中删除了*.lock文件,这对我很有效。 - Marcio Sartini

28
在Heroku中,您可能会遇到推送到主分支的问题。您可以使用以下命令创建新的分支:

git checkout -b tempbranch

然后使用以下命令进行推送:

git push heroku tempbranch

请注意保留原有的HTML标签。

从主分支创建一个新分支并从那里推送后,它可以正常工作。 - CodecPM
在我的情况下,我将主分支合并到一个已经存在的分支中,并进行了推送。不知道为什么它能够成功,但是推送操作已经完成。 - Mugshep

25
如果您运行$ heroku logs,您可能会得到一个关于问题的“提示”。对我来说,Heroku不能检测我正在创建的应用程序类型。它要求我设置构建包。由于我正在创建一个Node.js应用程序,所以我只需要运行$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-nodejs。您可以在此处阅读更多信息:https://devcenter.heroku.com/articles/buildpacks。之后没有推送问题。
我知道这是一个老问题,但仍然在此发布,以防其他人遇到同样的问题。

1
运行 Heroku 日志显示了确切的问题。谢谢 :) - Lance Samaria

9

您可能也想检查一下Heroku是否告诉您CSS文件中有错别字。

在您推送后,仔细阅读终端中的冗长、乏味的消息。可能会出现这样的信息:Invalid CSS after。这意味着Heroku发现了一个错别字,并且您需要在CSS文件中进行修复。

您可以查找rake aborted!,然后直接查看推送失败的原因。


6
如果你遇到了这个错误,终端并没有足够的描述来帮助你,Heroku可能会通过他们的网站告诉你出了什么问题。请尝试以下操作:
  1. 登录Heroku并进入你的仪表盘;
  2. 从列表中选择有问题的应用程序;和
  3. 在“活动”选项卡下检查构建日志。
在我的情况下,我不小心忽略了Gemfile.lock文件。

谢谢,这解决了我的问题。我在项目中有两个不同的锁定文件:package-lock.json和yarn.lock,所以我通过“git rm yarn.lock”删除了后者。 - Ismail

2

指定 Node.js 版本

在 Heroku 上运行应用程序时,使用的 Node.js 版本也应在 package.json 文件中定义。您应该始终指定与您正在开发和测试的运行时匹配的 Node.js 版本。要查找您的版本,请键入 node --version。

您的 package.json 文件将类似于以下内容:

"engines": { "node": "10.x" },

它应该可以正常工作。


2
我遇到了同样的问题。
请查看您的git ignore文件,检查是否没有忽略.env文件。
这是我的问题,并且已经解决了。

1

如果您在尝试将Django应用程序推送到Heroku时遇到以下错误:

![remote rejected] master -> master(pre-receive hook declined) error:failed to push some refs to https://git.heroku.com/app_name.git

只需查找此内容:

Error while running '$ python manage.py collectstatic --noinput'. remote: See traceback above for details. remote: remote: You may need to update the application code to resolve this error. remote: Or, you can disable collectstatic for this application: remote: remote: $ Heroku config:set DISABLE_COLLECTSTATIC=1

复制此内容: $ Heroku config:set DISABLE_COLLECTSTATIC=1

并将其粘贴到终端中。 按Enter,然后运行: $ git push Heroku master

如果您正在尝试推送Django应用程序,则应该解决问题。


我刚接触node.js。您的评论启发了我去寻找自己的错误(与您提到的不同),我成功解决了它。否则,我本来以为这个问题和Git以及refs有关,并在网上寻找相应的解决方案。非常感谢您。 - Sourab Sharma

1

在 requirements.txt 中列出了 setuptools/distribute 包。 请将其移除。


1
为了全面起见,问题可能是Heroku本身。在像这样的罕见情况下,https://status.heroku.com 会显示类似以下内容的信息:
更新
Heroku仪表板和元素已恢复。我们仍在努力恢复其他受影响的服务。
仍然受影响的服务包括:
- Builds - Review apps - Pipelines - Github deploys - Heroku CI - Heroku Buttons
40分钟后,我能够部署,因为Heroku报告说:
所有受影响的服务都已恢复,并且正在按预期工作。我们将继续监控以确保没有进一步的问题。

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