强制 Heroku 重新编译所有资产

15

我更新了两张图片,但Heroku只能正确显示其中的一张,另一张却仍然是旧图。部署日志输出显示两张图像都使用了新哈希值进行预编译,但用于检索application.css文件中图片之一(由旧哈希值检索)的哈希仍然是旧的。它以某种方式抓取了旧图。

我想强制Heroku重新编译每个资产并重新启动服务器(实际上是进行全新的部署)。目前它似乎“智能”地只预编译被判断为新的资源。我尝试了rake assets:clobberrake assets:precompile,但没有改变——仍然使用旧哈希值来获取其中一个旧版本的图片,但成功获取另一个版本。还有其他可尝试的选项吗?

4个回答

21

手动过期资产已经生效 -- 在config/production.rb中将config.assets.version = 1.0更改为1.1。但是仍然不确定发生了什么。


这也解决了我的Capistrano问题,即使某些JS已更改,它也不会重新编译资产。 - collimarco

8

现在您可以重新编译资产而无需提交任何内容。

heroku plugins:install heroku-repo

然后

$ heroku repo:reset --app=appname
$ git push heroku

来源:https://dev59.com/h2kw5IYBdhLWcg3wrsrn#9736959

这个命令曾经可以实现相同的功能,但已被移除且不再起作用:

$ heroku repo:rebuild -a appname

1
这个命令已被移除 https://github.com/heroku/heroku-repo/commit/fb1306de5813dffadc046e82cd327175ca58c44b - qix
在将代码推送到Heroku之前,我还需要使用heroku repo:purge-cache --app=appname命令来重新编译资产。 - ybart
1
@ybart,这是 heroku repo:purge_cache --app=appname - Michael
2
此外,您可以像这样安装repo插件:heroku plugins:install heroku-repo - Michael

0

有点恶心,但只需进行小改动并重新部署。

你必须实际重新部署,因为这时会发生资产编译并编译您的 slug。仅使用 heroku restart 重新启动服务器、更改配置变量或几乎任何其他操作都不会为您构建新的 slug。

我刚遇到了这个问题,至少对我来说这是解决它的方法;可能对你不适用。


问题陈述说他可以看到预编译在部署时发生。他想强制Heroku从头开始,而简单的更改和部署是不够的。 - Michael
实际上,这个问题说:“它似乎只会智能地预编译那些被判断为新的资产。”部署确实是从头开始,但如果资产没有改变,则不会重新编译资产(在此步骤中不检查环境变量)。尽管如此,@bekicot的答案看起来更简洁。 - Steve Ellis

-1
这种情况经常发生,你为什么不尝试在服务器上使用heroku run rake assets:cleanheroku run rake assets:precompile来清理资产呢?

不幸的是,这似乎没有改变任何事情。我现在又遇到了另一个应用程序的同样问题... - Erik Trautman
3
这不会奏效,因为你只能在新的工作 dyno 中重新编译资产。每次启动 dyno 时,它都会使用上一次编译的状态,所以你所做的任何更改都将在退出时被丢弃。 - Eden Townsend

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