gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:42:53 25 4
gpt4 key购买 nike

我对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com