Rails 4.2 中的资产指纹是否发生了变化?
Has asset fingerprinting changed in Rails 4.2?
我最近将一个 Rails 4.1 应用程序升级到了 4.2。当我在开发模式下查看页面源代码时,所有资产现在都有一个与之关联的指纹:
/assets/application-7d90cdd9d3a3cc2a3445c0e8b748db14.js?body=1
Pre 4.2 我认为它曾经是
/assets/application.js?body=1
有什么改变或者我错过了配置设置吗?
是的,Rails 4.2 现在默认在开发中启用资产摘要 ("fingerprints")。
这是提交:
https://github.com/rails/rails/commit/f369bcf9a0dba0a945ca6fe53343c042f54c1fcf
为什么要改变?说来话长,但我的理解是 Rails 团队希望开发和生产行为更加相似,以防止部署时出现意外错误。
Rails 4 中的另一个相关变化是它不再在生产中生成 没有 摘要的资产。为了及早发现错误(即在部署到生产环境之前),已更改开发设置以匹配生产摘要行为。
要了解为什么这有帮助,请看下面的示例:
假设您的代码(或者您正在使用的 jQuery 插件)直接通过其路径引用资产,如下所示:/assets/logo.png
。在 Rails 4.2 之前,这在开发中工作得很好。但是当你部署时,惊喜! /assets/logo.png
不存在。为了使其在生产中工作,您需要使用 asset_path
帮助程序生成带有指纹的正确路径。
通过强制您在开发中使用 digests/fingerprints,Rails 4.2 帮助您在开发中发现此错误。部署时不再有不愉快的意外。
也就是说,这些变化是……controversial,至少可以这么说。
我发现了这个 gem: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
我最近将一个 Rails 4.1 应用程序升级到了 4.2。当我在开发模式下查看页面源代码时,所有资产现在都有一个与之关联的指纹:
/assets/application-7d90cdd9d3a3cc2a3445c0e8b748db14.js?body=1
Pre 4.2 我认为它曾经是
/assets/application.js?body=1
有什么改变或者我错过了配置设置吗?
是的,Rails 4.2 现在默认在开发中启用资产摘要 ("fingerprints")。
这是提交:
https://github.com/rails/rails/commit/f369bcf9a0dba0a945ca6fe53343c042f54c1fcf
为什么要改变?说来话长,但我的理解是 Rails 团队希望开发和生产行为更加相似,以防止部署时出现意外错误。
Rails 4 中的另一个相关变化是它不再在生产中生成 没有 摘要的资产。为了及早发现错误(即在部署到生产环境之前),已更改开发设置以匹配生产摘要行为。
要了解为什么这有帮助,请看下面的示例:
假设您的代码(或者您正在使用的 jQuery 插件)直接通过其路径引用资产,如下所示:/assets/logo.png
。在 Rails 4.2 之前,这在开发中工作得很好。但是当你部署时,惊喜! /assets/logo.png
不存在。为了使其在生产中工作,您需要使用 asset_path
帮助程序生成带有指纹的正确路径。
通过强制您在开发中使用 digests/fingerprints,Rails 4.2 帮助您在开发中发现此错误。部署时不再有不愉快的意外。
也就是说,这些变化是……controversial,至少可以这么说。
我发现了这个 gem: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