Rails 4资产管道不会使用asset_path引用其他资产来覆盖资产

时间:2013-10-25 20:35:34

标签: ruby-on-rails heroku asset-pipeline

因此,资产管道摘要存在一个小问题,因为我们有许多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。

2 个答案:

答案 0 :(得分:5)

解决方案是suggested here,涉及使用depend_ondepend_on_asset指令。在我的情况下,将其添加到.js.erb文件中:

//= depend_on_asset views/template.html

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

只要根据需要更改views/template.html,这将重新编译此文件。

答案 1 :(得分:2)

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

<强>更新 不确定这是否与您面临的问题相同,但听起来确实相似。看一下这个Heroku issue on github

如果它是相同的(或类似的),Schneems提到它需要对资产文件进行3次更改,以便链接器清除文件。

建议的步骤是运行以下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/

最好根据自己的情况修改上述内容。