ruby - 为什么多次构建相同的 gemspec 会创建不同的 gem 二进制文件?

标签 ruby rubygems

通过gem build GEMSPEC构建gem时,尽管代码或gemspec没有任何变化,但每次创建的.gem文件都是不同的。为了进行演示,我将使用 Make your own gem 中链接的 Hola 存储库。 RubyGems.org 上的页面:

$ git clone https://github.com/qrush/hola
$ cd hola
$ gem build hola.gemspec -o 1.gem
$ gem build hola.gemspec -o 2.gem

使用diffsha512sum你可以清楚地看到生成的二进制文件不一样:

$ diff 1.gem 2.gem
Binary files 1.gem and 2.gem differ
$ sha512sum ./*.gem
288a329f69febb51288bea381275688172e2d13fb13ee0868e910e7e0efdaf1e330b158502ce01378eff637f8d18aa8d8c4f6d9c2922deb92a4018ddacdc0624  ./1.gem
cb35b0e1eabfd3d6b0bff698a7d79caf2bcb6e71781134702857fde8619bc09a451284984ac0394a27c7266e5313374d98c2a1502d2ad89a97de1ac10844978c  ./2.gem

为什么会发生这种情况?有没有办法让 gem build 输出相同的二进制文件?如果没有,有没有办法验证构建的 gem 的内容是否与另一个相同?

最佳答案

gemfile 基本上是一个 tar 存档,tar 保留了诸如文件修改时间戳之类的内容,这些内容会发生变化。请参阅here对这一现象进行更彻底的调查。

关于ruby - 为什么多次构建相同的 gemspec 会创建不同的 gem 二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68656647/

相关文章:

ruby-on-rails - 如何 "re-install"一个gem?

Ruby 在Netbeans 7 中被删除,如何在Netbeans7 中使用它?

ruby-on-rails - 使用充当投票 gem rails 获得用户最喜欢的帖子

ruby - 是否可以覆盖 gemfile 进行本地开发?

ruby - 将具有特定小数位的数字保存到变量

ruby - 需要 gem 中可执行文件中的文件

ruby - bundle 安装莫名其妙地挂起

ruby - Sinatra/Warden/Ruby - 如何确保我的用户只能通过单个 session 登录?

ruby-on-rails - 文章#index 中的 Ruby on Rails 教程 NoMethodError

ruby - 排序数组,并选择最小的数字?