博客
返回博客文章
2013 年 2 月 24 日
已发布 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。