我想知道是否有办法迫使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。
谢谢!
答案 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
答案 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
”的构建方法
答案 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
应该有效:)