博客
返回博客文章
2013 年 12 月 26 日
2.2.0 发布
作者:Eric Hodel
RubyGems 2.2.0 包含重大增强、次要增强和 bug 修复。
要更新到最新版 RubyGems,可以运行
gem update --system
如果你需要升级或降级,请按照 如何升级/降级 RubyGems 说明进行操作。要手动安装 RubyGems,请参阅 下载 RubyGems 页面。
特别感谢 Vít Ondruch 和 Michal Papis 在 RubyGems 为 2.2.0 版本做准备的过程中进行测试并发现漏洞。
重大增强
-
当启动 rubygems 可执行文件时,RubyGems 可以在 gem 依赖文件(gem.deps.rb 或 Gemfile)中检查,并使用找到的依赖。这意味着
rake
将类似于bundle exec rake
起作用。要启用此功能,请将RUBYGEMS_GEMDEPS
环境变量设置为你的依赖文件的路径。有关更多详细信息,请参阅 Gem::use_gemdeps。
-
现在可以在多个 Ruby 版本之间共享一个 RubyGems 目录。激活后,当缺少已构建的对象时,RubyGems 将为当前平台自动编译缺少的扩展。由 Michal Papis 提供的问题 #596。
默认情况下,不同平台不会共享 gem 安装位置,因此必须通过将 GEM_HOME 设置为公共目录来配置此位置。某些 gem 使用固定路径来要求扩展并且与共享 gem 目录不兼容。
默认共享位置可以通过 Gem.default_ext_dir_for 由 RubyGems 打包程序进行配置。由 Vít Ondruch 提供的请求拉取 #744。
次要增强
- 当将一个 gem 上传到一个公共存储库时,RubyGems 会检查“allowed_push_host”元数据值以防止意外上传(例如 rubygems.org)。如果你有私有 gem,你应该在 gem 规范元数据中设置此值。由 Seamus Abshere 提供的请求拉取 #603。
gem list
现在显示多个参数的结果。由 Zach Rabinovich 提供的请求拉取 #604。gem pristine --extensions
将仅还原带有扩展的 gem。由 Postmodern 提供的问题 #619。- Gem::Specification#files 现在已按顺序排列。由 Justin George 提供的请求拉取 #612。
- 对于
gem list
及其朋友来说,如果仅通过 –quiet 请求本地或远程 gem 信息,则会省略“本地”和“远程”标头。由 Michal Papis 提供的请求拉取 #615。 - 添加了 Gem::Specification#full_require_paths,与 require_paths 类似,但返回完全合格的结果。请求 #632 由 Vít Ondruch 提出。
- RubyGems 现会寻找 https:// 源的 https_proxy 环境变量。如果没有 https_proxy,RubyGems 将回退到 http_proxy。问题 #610 由 mkristian 提出。
- RubyGems 现会在 .gem 文件中创建目录。问题 #631 由 marksolaris 提出。
- 当某个规范包含自己的 gem 时,RubyGems 会引发一个异常。问题 #623 由 notEthan 提出。
- 更新 RubyGems 时,RubyGems 现会显示相关的版本说明信息。问题 #647 由 Trevor Wennblom 提出。
- 已弃用 Gem::Installer::ExtensionBuildError,推荐使用 Gem::Ext::BuildError。旧常量为新常量的别名。
- 现在始终写入 gem_make.out 文件,即使生成成功。这将有助于调试报告成功的构建失败。
- 如果某个规范未能验证,RubyGems 会显示一个指向规范引用指南的链接。问题 #656 由 Markus Heiler 提出。
- 当使用
gem install -g
时,RubyGems 现在会检测 Isolate、Gemfile 或 gem.deps.rb 文件的存在。 - 添加了 Gem::StubSpecification#stubbed? 以帮助确定用户是否应该运行
gem pristine
以加速 gem 加载。请求 #694 和 #701 由 Jon Leighton 提出。 - 当某个 gem 存在可能过于严格的悲观版本依赖项时,RubyGems 现在会发出警告。
- 当某个 gem 存在端点开放的依赖项时,RubyGems 现在会发出警告。
- 当某个 gem 的依赖项被定义了两次时,RubyGems 现在会引发异常。
- 将许可证规范属性标记为推荐的。请求 #713 由 Benjamin Fleischer 提出。
- 当可以时,RubyGems 使用 io/console 而不是
stty
。请求 #740 由 Nobuyoshi Nakada 提出 - 放宽了 Gem.ruby 测试以适用于覆盖 ruby 所在位置的平台。请求 #755 由 strzibny 提出。
Bug 修复
- 当
gem which
给定的任何文件都找不到时,RubyGems 现在会返回错误状态。Ruby bug #9004 由 Eugene Vilensky 提出。 - 修复了构建 rake 扩展时的命令转义问题。请求 #721 由 Dmitry Ratnikov 提出。
- 修复了当 GEM_HOME 是一个相对目录时的 gem 卸载问题。问题 #708 由 Ryan Davis 提出。
- 现在 Gem::Validator#alien 会忽略默认 gem。问题 #717 由 David Bahar 提出。
- 修复了 RubyGems 中的拼写错误。请求 #723、#725、#731 由 Akira Matsuda 提出,请求 #736 由 Leo Gallucci 提出,请求 #746 由 DV Suresh 提出。
- RubyGems 现在对缓存的 gem 文件保持独占锁以防止更新不正确。请求 #737 由 Smit Shah 提出。
- 提升了
gem install --ignore-dependencies
的速度。补丁由 Terence Lee 提供。