Rails 4.2中是否更改了资产指纹识别?

时间:2015-03-27 22:11:16

标签: ruby-on-rails ruby-on-rails-4 sprockets ruby-on-rails-4.2

我最近将Rails 4.1应用程序升级到4.2。当我在开发模式下查看页面源时,所有资产现在都有一个与之关联的指纹:

/assets/application-7d90cdd9d3a3cc2a3445c0e8b748db14.js?body=1

Pre 4.2我认为它曾经是

/assets/application.js?body=1

有什么改变或我错过了配置设置吗?

2 个答案:

答案 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