6

因此,资产管道摘要存在一个小问题,因为我们有许多 HTML 模板作为资产(用于 AngularJS),并且我们在带有asset_path帮助程序的 Javascript 文件中引用这些资产的路径。不幸的是,由于资产预编译步骤(和 Heroku)检查更改的方式,对模板进行更改不会导致重新编译 javascript 文件。

所以基本上在一个文件中,application.coffee.erb我们可能有类似的东西:

url = '<%= asset_path('views/template.html') %>'

当我们运行时rake assets:precompile,它将变成/assets/views/template-1023911231.html具有摘要值但如果template.html.slim更改摘要将更改但由于application.coffee.erb没有从根本上改变它不会重新编译并继续指向旧摘要。

想法?解决方案?实际上,这对我来说似乎是一个错误。

更新

目前我最好的解决方案是更新 application.rb 中的资产版本,如果我们需要更改我们的 HTML 模板资产但没有任何 javascript 发生变化。

4

2 回答 2

5

这里提出了一个解决方案,其中涉及使用depend_onordepend_on_asset指令。在我的情况下,将此添加到.js.erb文件中:

//= depend_on_asset views/template.html

url = '<%= asset_path('views/template.html') %>'

这将在任何时候views/template.html根据需要重新编译该文件。

于 2013-10-30T16:21:21.933 回答
2

您是否尝试过运行rake assets:clean然后rake assets:precompile重新编译?

更新 不确定这是否与您面临的问题相同,但听起来确实相似。在 github 上查看这个Heroku 问题。

如果相同(或相似),Schneems 提到需要对资产文件进行 3 次更改才能使 sprockets 清除文件。

推荐的步骤是运行以下 4 次并比较输出:

echo "body {background-color: red}">> app/assets/stylesheets/application.css
git add .; git commit -m "assets changed 1"
git push heroku master
heroku run ls public/assets | awk /application/

最好您修改上述内容以适合您的情况。

于 2013-10-25T20:39:17.140 回答