无需推送或配置更改即可重新编译Heroku slug

时间:2012-03-15 02:27:41

标签: heroku

我想知道是否有办法迫使Heroku重新编译slug而不推送新的提交和/或更新配置变量。

我为什么要这样做?:

我在Heroku上使用Cedar堆栈来获取Rails 3.2应用程序,我遇到了rake assets:precompile任务失败的问题(仅在编译期间---以后它可以与heroku run一起使用) 。我非常怀疑这是因为在slug编译期间某些环境变量不可用,我认为heroku labs:enable user_env_compile实验性功能将解决这个问题。

但是,在启用user_env_compile功能的情况下,配置更改不会触发重新编译slug,并且我的代码没有更改,所以我没有任何新的提交要推送。

当然,我可以通过一个微不足道的改变来推动“虚拟”提交,这可能是最简单的答案---但我想知道是否有一个heroku命令可以让我直接重新编译slug。

谢谢!

9 个答案:

答案 0 :(得分:211)

目前最简单的解决方法是push an empty commit

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

答案 1 :(得分:86)

使用git pre-recieve钩子调用Slug编译,因此重新编译的唯一方法是推送新的提交。

为了完整性,请参阅slug compiler关于Heroku的这篇文章。它讨论了使用预接收挂钩来调用Compilation标题下的slug编译过程。

答案 2 :(得分:22)

我的一般做法是:

git commit --amend -C HEAD
git push heroku:master -f

我不确定我是否会在生产中做到这一点而不确定,因为它在技术上重写了最后一次提交,但它不应该在理论上引起任何问题。当你在舞台上测试时,它非常好。

作为一个额外的好处,因为大多数人使用Vim来编辑提交消息是个问题SHIFT-ZZ将快速保存并退出提交消息,而不对其进行任何更改。

在相关的说明中,我有点震惊Heroku仍然没有这个功能。我经常看到Heroku因为问题而无法部署。

感谢Michael Mior使用-C HEAD来避免打开编辑器的想法。

答案 3 :(得分:15)

更新: heroku repo:重建已经removed

Heroku有一个可以使用的Build API,请参阅:Building and Releasing Using the API


如果 heroku-repo 插件,您可以使用 repo:rebuild 命令。

heroku repo:rebuild -a appname

https://github.com/heroku/heroku-repo

答案 4 :(得分:15)

Heroku发布了一个插件,询问的是:https://github.com/heroku/heroku-repo

安装它:

$ heroku plugins:install heroku-repo

强制重建:

$ heroku repo:purge_cache -a appname
$ heroku repo:reset -a appname
$ git push heroku

答案 5 :(得分:9)

看起来还没有。但是,已在heroku github repo上打开feature request

它还提到“另一种不依赖于git push”的构建方法

https://github.com/ddollar/heroku-anvil

答案 6 :(得分:3)

这有一个heroku plugin

$ heroku plugins:install heroku-releases-retry
Installing plugin heroku-releases-retry... done
$ heroku releases:retry
Retrying v16 on ⬢ murmuring-lowlands-3398... done, v17

答案 7 :(得分:-3)

取下分支,然后重新推动它。无需使用插件。

git push heroku :master
git push heroku master

答案 8 :(得分:-14)

git push --force应该有效:)