微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – Rails编译有无md5哈希的资产,为什么?

我比较新的RoR,我很好奇为什么Rails编译资产有无md5哈希生产?

我运行bundle exec rake资产:clean然后绑定exec rake资产:precompile

我的production.rb文件

MyApp::Application.configure do

  # Code is not reloaded between requests

  config.cache_classes = true

  # Full error reports are disabled and caching is turned on

  config.consider_all_requests_local       = false

  config.action_controller.perform_caching = true

  # disable Rails's static asset server (Apache or Nginx will already do this)

  config.serve_static_assets = false

  # Compress JavaScripts and CSS

  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed

  config.assets.compile = false

  # Generate digests for assets URLs

  config.assets.digest = true 

  config.action_dispatch.x_sendfile_header = 'x-accel-redirect' # for Nginx

  config.assets.precompile += %w(tos.js,tos.css)

  config.i18n.fallbacks = true

  config.active_support.deprecation = :notify

end

我的应用程序与名称中的散列文件一起使用,这在我的情况下应该是这样的:)

所以我有两个问题:

1)为什么编译时会发生?

Rails compiles assets both with and without md5 hash for production

2)这些文件是什么(没有哈希)?

也许我没有得到什么,所以请有人解释.

解决方法

它的原因是,您可以在不知道MD5指纹的情况下访问文件(例如,在非rails应用程序中,或rails应用程序中的未由rails堆栈编译或运行的文件(例如,500 / 502状态错误页面),在这种情况下,您必须编译资源,然后在每次更新代码时更改静态HTML文件中的css / js链接(从而导致MD5哈希更改).

因此,rails产生每个资产文件的2个副本,一个具有文件名中的指纹,另一个没有(例如application-731bc240b0e8dbe7f2e6783811d2151a.css和application.css).指纹版本明显优先(参见rails asset pipeline guide中的“what is fingerprinting and why should I care”).但不消化的版本是作为回退.

作为这个问题的最后一个想法,我将读取以下拉动请求到rails git repo:https://github.com/rails/rails/pull/5379,他们正在讨论未消化的文件名的优缺点,以及是否可以关闭编译的他们.

HTH

原文地址:https://www.jb51.cc/ruby/273019.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐