RubyGems 导航菜单

博客

返回博客帖子

2.1.0 已发布

RubyGems 2.1.0 包含一些新功能以及安全更新以修复 CVE-2013-4287

若要更新到最新版本 RubyGems,可以运行

gem update --system

如果需要升级或降级,请按照 如何升级/降级 RubyGems 的说明进行操作。若要手动安装 RubyGems,请参阅 下载 RubyGems 网页。

安全修复

  • 由于 Gem::Version 验证中的回溯,RubyGems 2.0.7 及更早版本容易出现 CPU 使用率过高的情况。有关包括受影响 API 在内的所有详细信息,请参阅 CVE-2013-4287。修复版本包括 Ruby 1.9.3 的 2.0.8、1.8.26 和 1.8.23.1。由达米尔·沙里波夫提出的问题 #626。

主要增强功能

  • RubyGems 使用一种新的依赖关系解析器来安装 gem,其工作方式类似于关联包管理器解析器。新解析器可以解决以前的解析器无法解决的冲突,并且可以在发现冲突时提供改进的诊断信息。

次要增强功能

  • RubyGems 现在改进了对 ARM 架构的平台匹配。使用“arm”CPU 构建的 Gems 将匹配任何特定的 ARM CPU。有关详细信息,请参阅 gem help platform。由金·伯奇斯特兰德修复的问题 #532。
  • –version 选项现在接受复合要求,与 gem 依赖关系中的要求相同。如下调用将安装介于 4.0.0.beta 和 4.2 之间的 rails

    gem install rails -v '>= 4.0.0.beta, < 4.2'
    

    由加里·S·韦弗修复的问题 #531

  • gem clean 现在允许使用 -n 作为 --dryrun 的别名。由加斯顿·拉莫斯提交的 Pull Request #517
  • gem help 中增加了 gem update --system。由文斯·瓦德瓦尼提交的 Pull Request #514
  • gem env 输出中增加了 PATH。由米哈尔·帕皮斯提交的 Pull Request #490
  • gem owner 中增加了 –host 选项以匹配使用 gemcutter API 的其他命令。由雨果·洛佩斯·塔瓦雷斯提交的 Pull Request #462 和问题 #461
  • gem uninstall 中增加了 –abort-on-dependent。这将终止该操作,而不是询问是否卸载其他 gem 所依赖的 gem。由菲利普·阿恩特提交的 Pull Request #549。
  • RubyGems 在安装时不再更改 Gem::Specification.dirs。基于维特·翁德鲁奇提交的 Pull Request #452
  • 如果存在,RubyGems 会使用 MAKEmake 环境变量,而不是 rbconfig.rb 中的 make。Erik Hollensbe 发起的 PR #443
  • RubyGems 现在可以将远程源缓存文件保存到由 ENV["GEM_SPEC_CACHE"] 控制的备用目录中。Michal Papis 发起的 PR #489
  • 现在对生成的私钥进行加密。pietro 发起的 PR #453
  • 将 Gem::Request 与 Gem::RemoteFetcher 分离。Steve Klabnik 发起的 PR #283。
  • RubyGems 在验证时指出 .gem 的内容已损坏。William T Nelson 发现的 Bug #519
  • 重构常用的安装程序设置。Gastón Ramos 发起的 PR #520
  • 将激活测试移至 Gem::Specification。Gastón Ramos 发起的 PR #521
  • 如果指定含有预发布版本号的--version 选项,RubyGems 将自动启用预发布版本,但只会使用最后一个版本。如果第一个版本是预发布版本,则不会保持粘性状态,除非同时明确指定 --prerelease--no-prerelease。修复了部分 #531 的问题。
  • RubyGems 现在支持 SSL 客户端证书。Robert Kenny 发起的 PR #550。
  • RubyGems 现在会建议如何修复权限错误。Odin Dutton 发起的 PR #553。
  • 增加了将 gem 安装为备用 Ruby 实现的默认 gem 的支持。Charles Nutter 发起的 PR #566。
  • 通过缓存加载的 gemspec,提高了 Gem::Specification#load 的性能。Charlie Somerville 发起的 PR #569。
  • 即使安全策略允许未签名 gem,RubyGems 现在也会在安装过程中给出 -P 时,警告未签名 gem 已验证;即使安全策略允许不受信任的证书,RubyGems 也会在出现不受信任的证书时发出警告。Grant Olson 发现的问题 #474
  • RubyGems 现在可以通过 gem pristine --all --only-executables --env-shebang(或 --no-env-shebang)重写带或不带 /usr/bin/env shebang 的可执行文件。Paul Annesley 发现的问题 #579。
  • RubyGems 现在可以在没有 OpenSSL 的情况下运行测试。nobu 发现的 Ruby Bug #8557。
  • 通过缓存 Gem::Version 对象和避免在 Gem::Specification 中使用 method_missing,提高了性能。Jon Leighton 发起的 PR #447。
  • .gem 中的文件现在会保留其修改时间。Jesse Bowes 发起的 PR #582
  • 通过 Array#bsearch(如果存在),提高了在 SpecFetcher 中查找依赖项的速度。Andras Suller 发起的 PR #595
  • gem uninstall 添加了 --all 选项,该选项会删除 GEM_HOME 中的所有 gem。Shannon Skipper 发起的 PR #584。
  • 添加了 Gem.find_latest_files,该文件等同于 Gem.find_files,但只返回每个 gem 最新版本中匹配的文件。Ryan Davis 发现的问题 #186。
  • 降低重复工作量后,gem outdated 的性能得到改善(速度仍然较慢,但是我发现快速连接在使用 250 个 gem 时的改善接近 50%)。另请参阅 Gem::Specification::outdated_and_latest_version

漏洞修复

  • rubygems_plugin.rb 文件现在只从最新安装的 gem 中加载。
  • 当安全性在顶层定义时,修复了 Gem.clear_paths。elarkin 的请求版本 #625
  • 在未提供 --host 时,修复了 gem push 的凭据创建。Arthur Nogueira Neves 的请求版本 #622
Eric Hodel