不需要更改代码,重新部署Heroku应用程序

167

我希望部署一个Heroku应用程序,理想情况下使用git push -u heroku master。但是只有在有待推送到主分支的提交时,这才有效。

如果没有需要推送的内容,我该如何重新部署应用程序?我尝试了git push -u heroku master -f,但仍然得到与下面相同的结果。

Branch master set up to track remote branch master from heroku.
Everything up-to-date

PS:我还想保留现有的应用程序,这意味着我不能使用此答案https://dev59.com/dmEh5IYBdhLWcg3ww11p#22043184


4
这听起来像是一个XY问题。你希望通过重新部署相同的代码来实现什么目标? - Chris
2
有一个情况是我更改了几个配置变量,这需要重新部署但不需要提交。 - nehem
1
设置配置变量会导致您的应用程序重新启动。它应该在无需重新部署的情况下生效。您能具体说明一下吗? - Chris
3
不幸的是,我删除了一个名为 DISABLE_COLLECTSTATIC=1 的配置变量,这个变量本应该触发另一个 Django 命令 manage.py collectstatic,并与 Heroku 部署逻辑相连接。 - nehem
在我的情况下,我更新了一个Git子模块,这不会触发重启。 - ToonAlfrink
7个回答

247

通常设置配置变量会导致应用程序重新启动。在大多数情况下,这样做后无需重新部署应用。

如果确实需要触发新的部署,您可以添加一个新的空提交,然后再次推送到Heroku:

git commit --allow-empty -m "Trigger Heroku deploy after enabling collectstatic"
git push heroku master
新的空提交是一个普通的提交。它有一个哈希值、作者、时间戳等信息。它将拥有与其父提交相同的树。这应该会导致 Heroku 再次使用与之前提交相同的代码构建您的应用程序 slug。
有点尴尬,但它起作用。

听起来很公平,也能完成任务。现在我很想备份/恢复存储库(.git)以将此提交从GitHub隐藏。 - nehem
3
即使使用 git commit --allow-empty 命令,我在 Heroku 上仍然收到 Everything up-to-date 的提示。 - Benny Code
5
啊,我明白问题所在了!我当时在一个不同的本地分支(而不是master)上。所以我需要执行以下命令:git push -f heroku the_branch_i_changed:master - Benny Code
2
除非您有关于重写公共分支历史的严格规定,否则只需执行git commit --amend; git push heroku master -f而无需实际更改。 - Dmitry Mugtasimov
2
我的JS资产是在部署过程中构建的,并且它们依赖于环境变量。因此,即使我设置了一个环境变量并重新启动应用程序,除非我进行部署,否则我的JS不会被重新构建。...只是指出这一点,因为有合法的情况需要重新部署。 - tybro0103
显示剩余2条评论

77

您也可以通过用户界面完成此操作!

  1. 登录您的 Heroku 仪表板并进入 deploy 部分
  2. 找到 manual deploy 选项

点击 Deploy Branch 按钮!

enter image description here

注意:您必须将您的应用程式与 GitHub 连接后,此选项才会可用(请参见 Derek 的评论)。


34
值得注意的是,您必须将应用程序连接到GitHub才能使用此选项。如果您正在使用Heroku Git部署方法且尚未将应用程序连接到其GitHub存储库,则手动部署的方法可能不是立即显而易见的。 - Derek
同意,但这是合理的,Heroku仪表板,点击部署选项卡,点击连接到GitHub按钮,在搜索字段中输入您的GitHub存储库,确认并连接。我相信连接后它会自动推送部署。 - jasonleonhard
使用Heroku Git部署,您需要将“master”分支重命名为“main”分支,以允许手动部署。 - ta2-1

15

1
起初我以为这是解决方案,但实际上它只是重新部署而不是重建。但是有一种方法可以在不通过推送新提交来污染您的Git历史记录的情况下进行重建:https://dev59.com/h2kw5IYBdhLWcg3wrsrn - aef
Python项目与npm有什么关系? - nehem
@nehem npm包是一个用于在Heroku上部署代码包的脚本。它与项目的类型无关,无论是Python还是其他任何语言。它实际上相当于一个shell脚本。 - richard

13

3
你可以运行heroku restart --app app_name,然后一切就好了。

18
这不会重新构建应用程序,它只会重新启动它。 - PanMan
@PanMan 这个问题是在问:“在没有任何东西需要推送的情况下,我该如何重新部署应用程序?”它并不要求重新构建应用程序,而是要求重新启动。考虑到没有任何更改,我不明白为什么你会想要重新启动。 - Leandro
5
它明确指出“重新部署”,而不是“重新启动”。例如,我需要重新部署(而不是重新启动),因为我正在尝试使用Heroku将我的应用程序Docker化,在调试时,我不想潜在地污染我的git树。这就是我来到这个SO问题的原因。 - Mike K

1

这对我很有帮助,它实际上完成了构建和发布,而不需要任何提交,与其他一篇文章相反,后者只执行发布操作:

heroku plugins:install heroku-builds
heroku builds:create --source-url https://user:token@api.github.com/repos/<username>/<repo name>/tarball/master/ --app <app-name>

来源:https://help.heroku.com/I3E6QPQN/how-do-i-force-a-new-deploy-without-adding-a-commit-to-my-github-repo

如何在不向 GitHub 存储库添加提交的情况下强制进行新的部署?

如果您需要在 Heroku 上重新部署您的应用程序,但又不想将任何更改推回到代码库中,则可以使用以下命令强制执行一次新部署:

git commit --allow-empty -m "Force empty commit"
git push heroku master

此命令会提交一个空的 Git 提交,从而触发 Heroku 进行新的构建和部署。


-5

停止 Heroku 应用程序使用:

$ heroku ps:scale web=0

而对于start,它使用:

$ heroku ps:scale web=1

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