我最近将Rails 4.1应用程序升级到4.2。当我在开发模式下查看页面源时,所有资产现在都有一个与之关联的指纹:
/assets/application-7d90cdd9d3a3cc2a3445c0e8b748db14.js?body=1
Pre 4.2我认为它曾经是
/assets/application.js?body=1
有什么改变或我错过了配置设置吗?
答案 0 :(得分:7)
是的,Rails 4.2现在默认在开发中启用资产摘要("指纹")。
这是提交:
https://github.com/rails/rails/commit/f369bcf9a0dba0a945ca6fe53343c042f54c1fcf
为什么要改变?这是一个很长的故事,但我的理解是Rails团队希望开发和生产行为更加相似,以防止在部署时出现意外错误。
Rails 4中的另一个相关变化是它不再在生产中生成没有摘要的资产。为了更早地捕获错误(即在部署到生产之前),已更改开发设置以匹配生产摘要行为。
要了解这有何帮助,这里有一个例子:
假设您的代码(或者您正在使用的jQuery插件,让我们说)直接通过其路径引用资产,如下所示:/assets/logo.png
。在Rails 4.2之前,这将在开发中完美地运行。但是当你部署时,会感到惊讶! /assets/logo.png
不存在。为了使其在生产中工作,您需要使用asset_path
帮助程序生成带有指纹的正确路径。
通过强制您在开发中使用摘要/指纹,Rails 4.2可帮助您在开发过程中解决这个错误。在部署时不再有令人不快的意外。
尽管如此,这些变化至少是...... controversial。
答案 1 :(得分:0)
我发现了这个宝石:https://github.com/alexspeller/non-stupid-digest-assets
它会禁用摘要。
自述文件:
只需将其放入Gemfile
即可gem "non-stupid-digest-assets"
如果您想仅为某些文件将非摘要资源列入白名单,您可以配置如下白名单:
# config/initializers/non_digest_assets.rb
NonStupidDigestAssets.whitelist += [/tinymce\/.*/, "image.png"]
请务必提供与正确资产匹配的正则表达式或相关资产的逻辑路径。
请注意,逻辑路径是您向asset_url
提供的路径,因此对于RAILS_ROOT/assets/images/foo.png
处的图片,逻辑路径为foo.png