ruby-on-rails - Rails 编译带有和不带有 md5 哈希值的 Assets ,为什么?

标签 ruby-on-rails md5 assets digest

我对 RoR 比较陌生,我很好奇为什么 Rails 编译 Assets 时使用和不使用 md5 哈希进行生产?

我跑 bundle exec rake assets:clean然后 bundle exec rake assets: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 状态错误页面。在这种情况下,您必须编译 Assets ,然后在每次更新代码时更改静态 HTML 文件中的 css/js 链接(从而导致 MD5 哈希值发生更改)。

因此,rails 为每个 Assets 文件生成 2 个副本,一个在文件名中带有指纹,另一个没有(例如 application-731bc240b0e8dbe7f2e6783811d2151a.css 和 application.css)。指纹版本显然是首选(参见 what is fingerprinting and why should I care 中的“rails asset pipeline guide ”)。但是未消化的版本是作为后备的。

作为对此事的最后一个想法,我将阅读以下对 rails git repo 的拉取请求:https://github.com/rails/rails/pull/5379他们正在讨论未消化文件名的优缺点,以及能够关闭它们编译的可能性。

HTH

关于ruby-on-rails - Rails 编译带有和不带有 md5 哈希值的 Assets ,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10045892/

相关文章:

ruby-on-rails - 递归部分局部变量不起作用

python - 我可以将 md5 身份验证与 psycopg2 一起使用吗?

HTTP 摘要认证 MD5 冲突

android - 在 libgdx 中管理桌面和设备版本之间的 Assets

ruby-on-rails - Rails 3 身份验证插件建议?

ruby-on-rails - Rails - 按连接表数据排序

ruby-on-rails - 如何在 Ruby 哈希中动态设置嵌套键的值

将文本文件转换为 C 字符串 - 使用 md5 进行哈希

android - 为什么 Visual Studio (Xamarin) 中的 Android Asset 文件不允许有重音符号?

css - Symfony 从模板加载资源