使用 javascript_url
我们可以获得 Assets 的 url:
<script src="<%= javascript_url 'company_widget' %>"
token="<%= current_user.token %>"
class="ofri-company-widget"
></script>
但是,
javascript_url
返回带有指纹的 url:domain.com/assets/company_widget-<fingerprint>.js
似乎这会被永久缓存,每当我们需要在脚本中进行更改时,使用此脚本的第三方将不得不重新加载它。
我注意到在没有指纹的情况下访问文件也有效:
domain.com/assets/company_widget.js
有没有办法告诉
javascript_url
不添加指纹?或者在这种情况下还有其他更好的解决方案吗? 最佳答案
您真正需要做的是在 Controller 操作中返回您的 javascript 文件,因此可以控制此特定文件的缓存。
在您的 Controller 操作中,您应该执行以下操作:
def company_widget
response.headers["Expires"] = 1.day.from_now.httpdate
expires_in 1.day, public: true, must_revalidate: true
format.js do
asset = open(ActionController::Base.helpers.asset_url('company_widget.js', host: host))
send_data asset.read, :type => asset.content_type
end
end
def host
request.protocol + request.host_with_port
end
然后您可以指向 Controller 操作并确保您可以控制返回的内容。
<script src="http://example.com/company_widget.js"></script>
Expires
header 是设置缓存的旧方法,而 expires_in
Rails 方法将设置 Cache-Control
header ,这是管理缓存的最佳方式。它优先于 Expires
。此外,您可以查看一篇关于缓存的精彩文章:https://www.mnot.net/cache_docs/
关于javascript - 在 Rails 中获取没有指纹的 Assets url,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48579024/