博客
返回博客帖子
09 Sep 2013
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 #517gem help
中增加了gem update --system
。由文斯·瓦德瓦尼提交的 Pull Request #514gem env
输出中增加了 PATH。由米哈尔·帕皮斯提交的 Pull Request #490gem owner
中增加了 –host 选项以匹配使用 gemcutter API 的其他命令。由雨果·洛佩斯·塔瓦雷斯提交的 Pull Request #462 和问题 #461gem uninstall
中增加了 –abort-on-dependent。这将终止该操作,而不是询问是否卸载其他 gem 所依赖的 gem。由菲利普·阿恩特提交的 Pull Request #549。- RubyGems 在安装时不再更改 Gem::Specification.dirs。基于维特·翁德鲁奇提交的 Pull Request #452
- 如果存在,RubyGems 会使用
MAKE
或make
环境变量,而不是 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