【问题标题】:Has asset fingerprinting changed in Rails 4.2?Rails 4.2 中的资产指纹是否发生了变化?
【发布时间】:2016-04-27 02:54:46
【问题描述】:

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

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

Pre 4.2 我认为它曾经是

/assets/application.js?body=1

有什么改变还是我错过了配置设置?

【问题讨论】:

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


    【解决方案1】:

    是的,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,至少可以这么说。

    【讨论】:

    • 感谢您的精彩回答!
    【解决方案2】:

    我发现了这个宝石: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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2020-12-03
      相关资源
      最近更新 更多