RubyGems 导航菜单

博客

返回博客文章

已发布 2.0.0

RubyGems 2.0 包含一些新功能和多项重大变更。某些变更会导致现有软件中断。这些变更由于对 RubyGems 内部进行的改进,使得 RubyGems 更易于维护,并且改进了 RubyGems 用户的 API。

如果您正在使用 bundler,请确保安装 1.3.0 预发行版或更高版本。旧版本的 bundler 无法与 RubyGems 2.0 配合使用。

自 RubyGems 1.8.25 以来(包括过去的预发行版)的变更

重大变更

  • 舍弃 Gem.unresolved_deps,转而使用 Gem::Specification.unresolved_deps
  • 将 Gem::Builder 合并至 Gem::Package。使用 Gem::Package.build(spec),代替 Gem::Builder.new(spec).build
  • 将 Gem::Format 合并至 Gem::Package。使用 Gem::Package.new,代替 Gem::Format.from_file_by_path
  • 将 Gem::OldFormat 移至 Gem::Package::Old。Gem::Package 会自动为您检测旧版本宝石,因此无需引用它。
  • 已删除 Gem::DocManager,由 Gem::RDoc 和 done_installing 钩子代替
  • 已删除 Gem::Package::TarInput,转而使用 Gem::Package
  • 已删除 Gem::Package::TarOutput,转而使用 Gem::Package
  • 已删除 Gem::RemoteFetcher#open_uri_or_path。(steveklabnik)
  • 已删除 Gem::SSL,转而直接使用 OpenSSL
  • 已删除 Gem.loaded_path
  • 已从宝石索引中删除 RSS 生成
  • 已从 .gemrc 中删除基准选项
  • 已在 gem build 中删除损坏的 YAML gemspec 支持
  • 已删除对 Ruby 1.9.1 的支持
  • 已删除多种已弃用的方法

主要增强功能

  • 提高了对随 ruby 2.0.0+ 一起提供的默认宝石的支持
  • 宝石可通过 Gem::Specification#metadata 获得任意元数据
  • gem search 现在默认为 –remote,并且像 gem list 一样固定。修复了第 166 个问题
  • 已添加 –document,用于替换 –rdoc 和 –ri。使用 –no-document 禁用文档,使用 –document=rdoc 仅生成 rdoc。
  • 默认情况下仅生成 ri 格式文档。
  • gem server 使用来自 RDoc 4.0 的 RDoc::Servlet 来生成 HTML 文档。
  • 添加了从兼容的 gemdep 文件(Gemfile、Isolate、gem.deps.rb)直接安装宝石的功能 gem install --file path
  • 添加了从 gemdeps 文件(Gemfile、Isolate、gem.deps.rb)加载宝石激活信息的功能。设置 RUBYGEMS_GEMDEPS=path 来加载它。将路径设为 - 以自动检测(将搜索当前和父目录)。

次要增强功能

  • 已添加 gem check --doctor 来清理卸载失败后的内容。Erik Hollensbe 修复的第 419 个问题
  • RubyGems 不再默认卸载依赖项损坏的 Gem。现在,您必须手动输入“是”。第 406 号拉取请求,提交者是 Shannon Skipper。
  • Gem::DependencyInstaller 现将 build_arg 传递给安装程序。第 412 号拉取请求,提交者是 Sam Rawlins。
  • 添加 cmake 编译器。第 265 号拉取请求,提交者是 Allan Espinosa。
  • 从 Gem 列表输出中移除 rubyforge 页面
  • gem pristine 添加 –only-executables 选项。修复了问题 #326
  • 为 ‘gem query’ 添加 -I 标志,用于排除已安装的项目
  • 为交互式会话添加 Gem.install(name, version=default)
  • 添加 Gem::FilePermissionError#directory
  • 添加 Gem::rubygems_version,它类似于 Gem::ruby_version
  • gem env 添加了 RUBYGEMS_HOST 文档
  • 添加了一个 post_installs 钩子,用于在 Gem::DependencyInstaller 完成安装一组 gem 后运行
  • 为 Gem::Commands::OwnerCommand 添加一个 usage 方法。(ffmike)
  • 向 Gem::Specification#doc_dir 添加一个可选的类型参数。
  • 添加公告 URL,并说明如何提交工单
  • 添加了有关如何在 setup 命令中使用 rdoc 和 ri 的指南。(jjb)
  • 尝试使用 –version 安装多个 gem 现在是一个错误。您可以指定每个 gem 的版本,例如 rake:0.9.5
  • 说明 Gem::CommandManager 示例代码,以避免多次加载问题。(baroquebobcat)
  • 现在重新下载损坏或错误的缓存规范。(cookrn)
  • 从安装程序中保存扩展构建参数,并重复用于 pristine
  • 如果操作系统允许,文档将构建在分叉的后台进程中。(alexch)
  • 从 gemcutter gem 导入 gem yank。修复了问题 #177、#343
  • 打包的 gem 现在包含并验证 SHA1 校验和
  • 从 gem 更新摘要中删除逗号,以便您可以将其粘贴回来进行清理。(amatsuda)
  • RubyGems 现在会在使用预发布依赖项构建 gem 时发出警告。修复了问题 #255
  • RUBYGEMS_HOST 环境变量用于确定用于推送或拉取 gem 的合适的 API 密钥
  • 卸载现在会按反向拓扑顺序执行。
  • 用户在尝试卸载 GEM_HOME 之外的 gem 时会被告知要输入什么内容
  • 在使用不可世界读取文件构建 gem 时,将显示一个警告。

错误修复

  • Gem.refresh 现在维护活动 gem 列表。清除列表将会导致多次加载,这会引发其他错误。第 427 号拉取请求,提交者是 Jeremy Evans
  • 如果 gem 推送凭据文件具有不安全的权限,则 RubyGems 现在拒绝读取该文件。第 438 号拉取请求,提交者是 Shannon Skipper
  • RubyGems 现在要求本地 gem 名称以“‘.gem’结尾。问题 #407,提交者是 Santiago Pastorino。
  • 不允许使用验证数据的安全策略安装旧格式的 gem。
  • 如果 RubyGems 无法从 gem 加载该规范,那么 gem 的安装将失败。漏洞 #419,提交者是 Erik Hollensbe
  • Vít Ondruch 的第 365 期:RubyGems 测试现以 FIPS 模式运行
  • 仅在我们拥有权限时才更新规范缓存。Ruby Bug #7509
  • gem install 现在忽略目录和与要安装的 gem 匹配的非 .gem 文件。Santiago Pastorino 的 Bug #407。
  • 在安装 RubyGems 时添加 PID 以设置 bin_file 以防止出错。ConradIrwin 修复的 #328
  • 设置 format_executable 时,在 Gem::Uninstaller 中添加了丢失的 require。(sakuro)
  • 即使较长的命令与确切名称重叠,也选择与 gem 命令名称完全匹配的命令
  • 使用 Pathname 实例修复了 Gem.loaded_path?
  • 修复了 Gem::Dependency.new 与 rubygems.org 检查不匹配的问题
  • 修复了 $SAFE=1 时 Gem::Specification.load 中的 SecurityError。(ged)
  • 修复了 1.9 上“gem list -r -a”中的 SystemStackError(cldwalker)
  • 修复 gem owners 命令,以便异常不会阻止命令的其余部分完成
  • 修复 gem unpack uninstalled_gem 默认版本选择器。
  • 修复了 gem 命令行帮助中已失效的 rubyforge URL
  • 修复了各种钩子集合的文档
  • 修复了 gem 目录不存在时设置时的文档生成。修复了 #253
  • 修复了文档,以反映默认覆盖项的加载位置。(ferrous26)
  • 修复了具有 8 位字符的 Makefile 的编辑。修复了 #181
  • 修复了依赖项无法解决引起的 gem 加载问题。
  • 独立测试 test_gem_package_tar_output。Shota Fukumori 的 Ruby Bug #4686
  • 修复了卸载消息中的拼写错误。(sandal)
  • Gem::Requirement#<=> 在非要求参数上返回 nil。
  • 如果给出了非版本参数,Gem::Requirement.satisfied_by? 则会引发 ArgumentError
  • Gem::Version#initialize 不再修改其参数。(miaout17)
  • 现在允许对 gem 存储库进行组可写权限。(ctcherry)
  • 现在重置 Gem::Specification 中的已缓存值版本或平台更改。修复了 #78
  • 针对错误要求提出了更具体错误。(arsduo)
  • 从文档中删除了对 ‘sources’ gem 的引用
  • 删除了未使用的块参数,以避免创建 Proc 对象。(k-tsj)
  • RubyGems 现在在覆盖可执行包装器之前询问。Ruby Bug #1800
  • 现在在安装期间使用 mkdir_p 创建 bindir。(voxik)
  • URI 方案匹配不再区分大小写。修复了 #322
  • ext/builder 现在会检查 $MAKE 和 $make(okkez)

RubyGems 2.0.0.rc.2 之后的变化

错误修复

  • Gem.gzip 和 Gem.gunzip 现在返回带有 BINARY 编码的字符串。Jeremy Kemper 的第 450 期
  • 修复了使用 –user-install 的可执行文件的放置。Jon Forums 的 Ruby bug #7779。
  • 修复了使用 –user-install 的 gem update。Jon Forums 的 Ruby bug #7779。
  • 修复了用于 Windows 的 test_initialize_user_install。Luis Lavena 的 Ruby bug #7885。
  • 在构建扩展之前创建扩展目标目录。Ruby Bug #7897 和 Kenta Murata 的补丁。
  • 由于缺少签名,对 LowSecurity 中的 gem 提供了固定的验证。感谢 André Arko。
Eric Hodel