Ruby on rails Rails编译包含和不包含md5哈希的资产,为什么?

Ruby on rails Rails编译包含和不包含md5哈希的资产,为什么?,ruby-on-rails,md5,assets,digest,Ruby On Rails,Md5,Assets,Digest,我对RoR比较陌生,我很好奇为什么Rails会编译带有和不带md5哈希的资产来进行生产 我运行bundle exec-rake-assets:clean然后bundle exec-rake-assets:precompile My production.rb文件: MyApp::Application.configure do # Code is not reloaded between requests config.cache_classes = true # Full e

我对RoR比较陌生,我很好奇为什么Rails会编译带有和不带md5哈希的资产来进行生产

我运行
bundle exec-rake-assets:clean
然后
bundle exec-rake-assets:precompile

My 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编译具有和不具有用于生产的md5哈希的资产

2) 这些文件(没有散列)用于什么


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

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

因此,rails会生成每个资产文件的两个副本,一个文件名中有指纹,另一个文件名中没有指纹(例如application-731bc240b0e8dbe7f2e6783811d2151a.css和application.css)。指纹版本显然是首选的(请参见中的“”),但非摘要版本是备用版本

作为对此事的最后考虑,我将阅读以下对rails git repo的pull请求:他们正在讨论非摘要文件名的优缺点,以及能够关闭编译它们的可能性


HTH

你好,克里斯,谢谢你的回复和解释,我认为我有一些错误的配置导致了这种行为。如果是这样的话,那我就没事了。再次感谢。另一方面,我的Rails安装与他的配置完全相同,但它只编译带有指纹的资产,我It’编译没有指纹的版本。由于Chris Bailey列出的原因,这很烦人。你知道我如何解决这个问题吗?@NudeCanatroll:你没有运行
rake资产:预编译:非编译