RubyGems 综述: 1.2 版本发布, JRuby, 更快地 Gem 发布

阅读数:133 2008 年 7 月 16 日

话题:Ruby语言 & 开发

Eric Hodel (InfoQ 对 Eric 的访谈) 发布了 RubyGems 1.2. 这个发行版包含了以下一些新特性:

  • RubyGems 不再是更新全部文件,而只是获取需要的 gemspec 文件。源需要升级至 RubyGems 1.2,以便 RubyGems 能发挥新元数据升级器的优势。如果一个源是 1.2 之前版本的,那么 RubyGems 出于兼容性的原因将使用原先更新全部文件的方法
  • RubyGems 现在包含运行和开发依赖,使用 #add_development_dependency#add_runtime_dependency 表示。没有标明类型的依赖将被视为运行依赖
  • 如果rubygems/defaults/operating_system.rbrubygems/defaults/#{RBX_ENGINE}.rb 这两个文件存在,那么RubyGems 会引用这两个文件。通过这两个文件,负责打包的人员和负责 ruby 实现的人员可以在 RubyGems 中添加自定义行为。 (如果发现 RubyGems 能力不足,请到 RubyGems 列表中提交改进建议。)
  • /etc/gemrc (以及 windows 上的等价物) 被用于全局设置
  • setup.rb 现在可以处理 --vendor 和 --destdir 两个选项,这两个选项可以被打包人员使用
  • gem stale 命令可以列出上次访问时的 gem 列表
如果从一个最近的 RubyGems 版本 (至少得是 0.8.5) 升级,新发行版的说明中提示可以运行如下指令:
$ gem update --system   (你可能需要 admin 或者 root 权限) 
而正如 Github 的博客中所说的,使用 RubyGems 1.2 可以很容易从 Github 安装 gem
如果你是一个 Ruby 爱好者,那么运行下面的命令来犒劳自己一下。
$ sudo gem update --system 

$ gem sources -a http://gems.github.com
现在你可以像安装 RubyForge 上 gem 一样地直接安装 Github 上的 gem,而不再需要任何特殊的说明


目前 JRuby 的用户还需要一些附加的工作来使用 RubyGems 1.2。Vladimir Sizikov 提供了一个让 RubyGems 1.2 运行在现在的 JRuby 1.1.x 版本上的暂行方案:
jruby -S gem update --system

由于 rubygems 1.1.1 的 bug,这个标准的升级命令不能让 rubygems 运行在 JRuby 1.1.2 上。幸运的是,这里有一个变通的办法:

jruby -S gem install rubygems-update -v 1.1.1

一旦安装了这个升级版本,接下来你就可以执行上面列出来的那个升级命令。
这里仅仅给出步骤,而Vladimir's 的邮件里给出了具体哪些步骤被执行、哪些文件被下载的详细解释,并且说明了为何这些可以使 RubyGems 1.2 正确运行。 

注:如果你不想执行这些步骤,那么你需要做的仅仅是等待 JRuby 1.1.3。这个版本将会使用 RubyGems 1.2。Ruby 1.9 的更新记录中说明了 1.9.x 的主版本将会同时升级到 1.2 版本。

最后,Tom Copeland 说明了 RubyForge 上的 Gems 在基础设施方面的改进

这个想法是跟踪新 gem 的文件名,而后 RubyForge 会在本地提供这些 gem,而不是将请求重定向到镜像。[..] 提供这些 gem 不再需要等待所有镜像进行更新。现在我只需要写一点代码在 24 小时之后从列表中删除文件名;到那时 gem 将已经被同步。 

因此,综上所述,gem 在它们发布后非常短的时间就可以使用了。
查看英文原文:RubyGems Roundup: 1.2 Release, JRuby, Faster Gem Releases