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

Nat*_*han 136 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.

谢谢!

Bra*_*och 220

现在最简单的解决方法是推送空提交.

git commit --allow-empty -m "empty commit"
git push heroku master
Run Code Online (Sandbox Code Playgroud)

  • 你可以通过强制推送之前的提交来保持一个干净的提交历史记录:`git reset HEAD~; git push -f heroku master`.提供另一个Heroku部署的时间成本,但干净的历史FTW. (51认同)
  • 只是为了补充你的`〜/ .profile`中的别名,添加:`alias heroku-rebuild ="git reset HEAD~; git push -f heroku master"`或`alias heroku-rebuild ="git commit --allow -empty -m'空提交'&& git push heroku master"`所以你可以简单地输入`heroku-rebuild` (2认同)

nmo*_*ott 88

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

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

  • 感谢您的回答.确实,git pre-receive hook编译了slug.(例如:http://devcenter.heroku.com/articles/slug-compiler).这并不一定意味着heroku不会(或不能)提供调用slug编译的替代机制,例如heroku CLI命令.也就是说,没有人提到这样的命令,所以我认为你的答案是现实的,至少目前是这样.谢谢! (22认同)
  • `回购:rebuild`不再插件有效的命令,在这里可以看到:https://github.com/heroku/heroku-repo/commit/fb1306de5813dffadc046e82cd327175ca58c44b (12认同)
  • 现在有一个解决方案.__heroku-repo__附加组件 (7认同)

Chr*_*ola 24

我的一般做法是:

git commit --amend -C HEAD
git push heroku:master -f
Run Code Online (Sandbox Code Playgroud)

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

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

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

感谢Michael Mior的想法,-C HEAD以避免打开编辑器.

  • 或者只使用`git commit --amend -C HEAD`来避免打开编辑器并保持提交消息相同. (2认同)
  • 这里需要注意的一件事是,如果您有不同的中央存储库(除了 Heroku 之外)。如果是这样,如果您已经推出了最后一次提交,那么下次拉取时,这将导致历史记录中的提交合并/重复。 (2认同)

Fli*_*imm 16

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

要安装它:

$ heroku plugins:install heroku-repo
Run Code Online (Sandbox Code Playgroud)

强制重建:

$ heroku repo:purge_cache -a appname
$ heroku repo:reset -a appname
$ git push heroku
Run Code Online (Sandbox Code Playgroud)


kha*_*eon 15

更新: heroku repo:rebuild已被删除.

Heroku有一个可以使用的Build API,请参阅:使用API​​构建和释放


如果是heroku-repo加载项,则可以使用repo:rebuild命令.

heroku repo:rebuild -a appname
Run Code Online (Sandbox Code Playgroud)

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

  • 当前版本的heroku-repo没有rebuild子命令 (5认同)
  • 刚刚评论了另一个帖子,但是值得在这里重复:heroku-repo插件看起来不错,但在尝试之后我做了*不*推荐它.有一个坏错误:它忽略了--app标志.当我打算重建升级时,这导致我意外地重建了我们的生产环境.这个错误已经在一年多的时间里针对回购开放而没有解决方案.我已经卸载了这个插件. (2认同)

Kos*_*tia 9

看起来这还没有.但是,已在heroku github repo上打开功能请求

它还提到"另一种不依赖的构建方式git push"

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