您想要第三方网站的非指纹资产 URL。
例如:assets/public_api.js
有一些插件或 gem 将指定的资产排除在指纹之外。然而,rails 以一种也创建非指纹文件的方式改变了预编译过程。因此这不是问题。更多信息在这里。
当资产没有指纹时,如何确保您的客户正在加载最新部署的脚本?
我建议youTube 用来公开他们的API的解决方案。基本上你所有的 assets/public_api.js 都是这样做的,它将另一个脚本标签注入到 dom 中。注入的那个会加载实际的 API 代码。现在你的 assets/public_api.js 变成 assets/public_api.js.erb 并且看起来像这样:
var tag = document.createElement('script');
tag.src = "<%=asset_path('/assets/javascripts/acctual_api')%>";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
请注意如何将 tag.src设置为/assets/javascripts/acctual_api的当前指纹路径。这样,您的用户将始终获得最新编译的 acctual_api 脚本。
如何更新 assets/public_api.js 的 ETAG?
我想您使用 Capistrano 或类似的基于配方的部署解决方案。也许您可以添加一个部署步骤,在重新启动之前更新服务器配置文件。它应该只是更新:
add_header Etag="update_me_on_deploy"
请注意,即使采用这种方法,您仍应使用版本化的 (assets/public_api.0.js) 公共脚本。