Ruby on rails Rails编译包含和不包含md5哈希的资产,为什么?
我对RoR比较陌生,我很好奇为什么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
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资产:预编译:非编译。