Rails:为什么资产指纹会根据资产的编制位置而有所不同?

时间:2014-04-17 07:47:26

标签: ruby-on-rails ruby-on-rails-4 asset-pipeline md5 fingerprint

我正在跑步

RAILS_ENV=staging bundle exec rake assets:precompile

在两台不同的计算机上,为同一资产文件获取不同的指纹。我在两台机器上安装了Rails 4.0.2。机器是

  • Mac OS 10.9.2和
  • Ubuntu Linux 12.04

无论资产编制在哪台机器上,指纹都不应该相同吗?

编辑:Linux机器是EC2实例。所以我制作了它的AMI并启动了第二个实例。在此相同实例上编译资产会产生与在原始实例上创建的指纹相同的指纹。这似乎是一个“问题”。用我的开发机器。

2 个答案:

答案 0 :(得分:0)

一个可能的原因是Mac OS X和Linux上的同一文件的内容可能实际上并不相同。在Linux和Max OS X中,换行符和回车符不会以相同的方式处理。

尝试相同的实验,预编译不同Mac上的资源,以确认Mac是否生成相同的指纹。

答案 1 :(得分:0)

我在这里的相关文章中发现了一些其他信息,这些信息可能与校验和的计算方式更为相关:How does finger print digest gets calculated in Rails 4.2

我也将原始答案留在下面,因为我认为它仍然很重要:

认为这是行为正在按设计进行的行为。自问这个问题以来,链轮可能已经改变了,但是我认为this code comment可以解释原因:

    # Caveat: Digests are cached by the path's current mtime. Its possible
    # for a files contents to have changed and its mtime to have been
    # negligently reset thus appearing as if the file hasn't changed on
    # disk. Also, the mtime is only read to the nearest second. It's
    # also possible the file was updated more than once in a given second.

在我的macOS系统上:

pry > File.mtime("Rakefile").to_i
=> 1605021933

在远程Linux服务器上,上推了完全相同的文件:

pry > File.mtime("Rakefile").to_i
=> 1606847789

就我而言,我注意到我的文件的mtime在本地被修改/更新(macos)是出于我不清楚的原因。我认为是由我正在使用的vim插件引起的(fzf?索引工具?我还没有研究过)

如果您在这两个文件上执行MD5,则它们是相同的。

tldr;这些资产可能是相同的,但是散列似乎包含其他信息,这些信息可能因系统而异