RubyGems 导航菜单

博客

返回博客文章

Rubygems 2.0.0.preview2

Rubygems 团队很荣幸地宣布推出 2.0.0.preview2。此版本也已合并到 ruby 2.0.0-preview2,以备行 Rubygems 2.0.0 最终版并纳入 ruby 2.0.0 最终版。

重大变更

2.0.0 中存在许多变更,这些变更可能会破坏期望 Rubygems 弃用特性代码。大多数使用 Rubygems 内部 API 的主要库已更新,但肯定还有一些尚未更新。

  • 弃用 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 的支持
  • 移除了许多弃用的方法

重大增强

与大多数 2.0 版本的意义一样,Rubygems 继续进行一系列增强。

  • 改进了对随 ruby 2.0.0+ 一起提供的默认宝石的支持。默认宝石现在被正确加载,其重要性高于标准库,这是原本的意图。
  • 通过 Gem::Specification#metadata,一个宝石可以拥有任意元数据。此功能允许用户轻松地将自己的数据嵌入到一个宝石中并对其进行检索。可以使用它来存储有关必需的本机包、提交信息或任何其他结构数据的的信息。
  • gem search 现在默认为 –remote,并且像 gem list 一样锚定。修复了 166 号问题
  • 添加了 –document,以取代 –rdoc 和 –ri。使用 –no-document 禁用文档,使用 –document=rdoc 仅生成 rdoc。
  • 默认情况下,只有 ri 格式文档通过 HTML gem server 自动生成。这将加快安装时间。
  • 添加对 gemdeps 文件的支持。gemdeps 格式文件是指 Gemfile、Isolate 或 gem.deps.rb 文件。这些文件包含运行特定应用程序所需宝石和版本的信息。Rubygems 现在具有 bundler 提供的一部分功能,以便于使用这些文件。
  • 添加直接从兼容 gemdep 文件(Gemfile、Isolate、gem.deps.rb)安装宝石的能力 gem install --file path
  • 添加从 gemdeps 文件(Gemfile、Isolate、gem.deps.rb)加载宝石激活信息的能力。设置 RUBYGEMS_GEMDEPS=path 以便加载它。将该路径设置为 - 以自动探测(将搜索当前目录和父目录)。

次要增强

此外,还有无数小的增强。这里是一些不错的抽样。

  • gem pristine 添加了 –only-executables 选项。修复错误 #326
  • 为 ‘gem query’ 添加了 -I 标志以排除已安装的项目
  • 为交互式会话添加了 Gem.install(name, version=default)
  • 添加了 Gem::FilePermissionError#directory
  • 添加了与 Gem::ruby_version 类似的 Gem::rubygems_version
  • gem env 中添加了 RUBYGEMS_HOST 文档
  • 添加了在 Gem::DependencyInstaller 完成安装一组宝石后运行的 post_installs 钩子
  • 为 Gem::Commands::OwnerCommand 添加了 usage 方法。(ffmike)
  • 为 Gem::Specification#doc_dir 添加了一个可选类型的参数。
  • 添加了公告 URL 并阐明了如何提交工单
  • 添加了有关如何在设置命令中使用 rdoc 和 ri 的指南。(jjb)
  • 现在尝试使用 –version 安装多个宝石会出错。您可以指定每个宝石版本,如 rake:0.9.5
  • 阐明了 Gem::CommandManager 示例代码以避免多加载问题。(baroquebobcat)
  • 损坏或错误的缓存规格现在会重新下载。(cookrn)
  • 扩展构建参数从安装中保存并重复用于 pristine
  • 如果操作系统允许,则在后台派生的进程中构建文档。(alexch)
  • 从 gemcutter 宝石导入了 gem yank。修复错误 #177、#343
  • 打包的宝石现在包含 SHA1 校验和并对其进行验证
  • 从宝石更新摘要中删除逗号,以便您可以将其粘贴回去以进行清理。(amatsuda)
  • RubyGems 现在会在构建含有预发布依赖项的宝石时发出警告。修复错误 #255
  • RUBYGEMS_HOST 环境变量用于确定用于推送或 yank 宝石的合适 API 密钥
  • 卸载现按逆拓扑顺序执行。
  • 当用户尝试在 GEM_HOME 之外卸载宝石时,系统会提示他们敲入的内容
  • 当使用不可全局读取的文件构建宝石时,会显示警告。

错误修复

最后,修复了许多错误。下面列举了本版本修复的部分错误。

  • 安装 RubyGems 时,在安装 bin_file 中添加 PID 以防范错误。由 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)
Evan