ruby-on-rails - Rails Assets 管道和摘要值

标签 ruby-on-rails ruby rake asset-pipeline sprockets

有谁知道 Assets 摘要值是怎么计算出来的?如果我有两个 JS 文件,其中包含各种其他包含的 JS 脚本,那么如果没有更改任何内部脚本,每个文件是否会保持相同的摘要哈希?还是每次运行 assets:precompile 操作时都会计算一个新的摘要值?

最佳答案

公认的答案并不完全正确。我们为暂存、演示和生产服务器构建静态 Assets ,并且在每种情况下为同一 Assets 赋予不同的摘要值。

原来Rails环境也在考虑之列。 Sprockets 按如下方式创建摘要:

# Sprockets::Environment::initialize
@digest_class = ::Digest::MD5

# Sprockets::Base::digest
@digest ||= digest_class.new.update(VERSION).update(version.to_s)

# Sprockets::Base::file_digest(path)
digest.file(path.to_s)

# Sprockets::Asset::initialize
@digest = environment.file_digest(pathname).hexdigest

Rails 钩入 sprockets 如下:

# Sprockets::Railtie
app.assets = Sprockets::Environment.new(app.root.to_s) do |env|
  env.version = ::Rails.env + "-#{config.assets.version}"
  ...
end

因此 Rails 正在创建一个版本与 Rails 环境相同的 Sprockets 环境,而 Sprockets 在创建摘要类时使用该版本。

关于ruby-on-rails - Rails Assets 管道和摘要值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10021784/

相关文章:

ruby-on-rails - Rails - 内联 CSS

ruby-on-rails - 在管理 Gem Rails 中设置管理员

ruby-on-rails - 在 rake 任务中调用时未加载环境变量

ruby-on-rails - 此代码能够从文件系统读取 CSV 文件,但是从 URL 读取呢?

ruby-on-rails - rake db::migrate 是如何工作的

ruby-on-rails - 当使用 attr_encrypted 进行 activerecord 存储时,我得到 nil 和 Empty

ruby-on-rails - 载波与 DigitalOcean 集成

ruby-on-rails - 在使用 capybara 进行集成测试时,在 rspec 中使用 mocha 模拟 api 调用

ruby-on-rails - Rails STI Controller

ruby - 如何在Windows 10上提高ChefDK命令的性能?