Rails 4 资产管道不会覆盖包含对其他资产的 asset_path 引用的资产

6
所以我们在资产管道摘要方面遇到了一个小问题,因为我们有许多HTML模板作为资产(用于AngularJS),并且我们在Javascript文件中使用asset_path助手引用这些资产的路径。不幸的是,由于资产预编译步骤(和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没有根本性的更改,因此不会重新编译,并继续指向旧的摘要。您有什么想法或解决方案吗?实际上,这似乎是一个错误。
更新:目前我所知的最好的解决方案是,如果需要更改HTML模板资产但没有更改任何JavaScript,则在application.rb中更新资产版本。
2个回答

5

这里提出了一个解决方案(链接),它涉及使用depend_ondepend_on_asset指令。在我的情况下,将其添加到.js.erb文件中即可:

//= depend_on_asset views/template.html

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

这将在views/template.html文件发生更改时重新编译此文件,以达到预期的效果。


你好。你在哪个文件中添加了depend_on指令?是在你的Angular路由文件中吗? - Jason Carty
在引用所依赖的资源的同一文件中添加 depend_on(或其类似物 depend_on_asset)。请记得将依赖声明放在文件顶部(在第一个非空白代码行之前)。 - Domi
@ChrisNicola 我的情况类似(请参见我的SO帖子此处),只是我的asset_path调用根本没有返回指纹。添加//= depend_on_asset也没有帮助。你是否需要添加任何特殊配置才能首先使用指纹? - hunteros
如果您的资产在生产中已经过指纹处理,asset_path 应该会在编译后的 js.erb(或其他编译文件)结果中呈现指纹处理的 URL。depends_on_asset 很重要,否则当指纹处理更改时,Rails 将不会重新编译 JS 文件。如果您根本没有得到任何指纹处理,那么可能有其他问题。 - Chris Nicola

2
你尝试过运行 rake assets:clean 然后再运行 rake assets:precompile 进行重新编译吗?
更新: 不确定是否与你面临的问题相同,但听起来很相似。请查看这个Heroku 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/

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

有趣的是,似乎没有任何影响。 - Chris Nicola
我遇到了一个Heroku问题,听起来与你面临的问题类似。请看一下我的更新帖子。 - 8bithero
有点像,但实际上 rake assets:clean 似乎没有任何作用是很有趣的事情。实际上,对于那些没有改变但具有对已更改资产的 asset_url 引用的资产,不会创建新的摘要和编译版本。这样说清楚了吗? - Chris Nicola
嗯,是的,这确实很奇怪。如果你使用的是Rails4,那么你应该使用rake assets:clobber而不是clean... 那么你尝试运行上述命令了吗?没有效果吗?我能想到的唯一解决办法就是手动删除所有编译过的资源,并确保清除了浏览器缓存。除此之外,也许你应该将此问题报告出来? - 8bithero
是的,我已经在这个问题上开了一个issue。似乎除了增加资产版本之外,没有什么好的解决方案了。https://github.com/rails/sprockets-rails/issues/95 - Chris Nicola

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