什么是RubyGem



RubyGems包管理系统(也称为Gems)已经成为Ruby代码包发布和管理的标准,在Ruby 1.9中已经打包在Ruby中提供。

每个gem有名称、版本和平台。比如rake gem版本是0.8.7,平台是ruby,可以在Ruby的任意平台上运行,其他平台还包括java(比如nokogiri)和mswin32(比如sqlite-ruby)。

Gems的结构,一般包括三部分:

代码,包括测试和支持工具。 文档
gemspec

每个gem有同样的标准代码组织结构:

% tree freewill
freewill/
├── bin/
│ └── freewill
├── lib/
│ └── freewill.rb
├── test/
│ └── test_freewill.rb
├── README
├── Rakefile
└── freewill.gemspec
`
lib包含gem的代码。
test或spec包含测试,取决于采用测试框架。 一个gem通常有一个Rakefile,用于rake程序自动化测试、生成代码和执行其他一些任务。
一般在bin目录下会有一个执行文件,gem安装后,该bin目录通常会在PATH路径中。 文档一般包含在README和代码中。当安装gem时,文档会自动生成,大多数gems包括RDoc文档,有的也用YARD
* 最后一部分是gemspec,包含有关这个gem的规格信息。包括文件、测试、平台、版本号和其他的作者邮件和姓名等等。

RubyGems修改了Ruby的装载路径,控制你的Ruby代码能被require找到。

一旦使用require请求一个gem,RubyGems

自动把lib目录加入到$LOAD_PATH中,有些gems也会增加其他目录,比如bin。这些是可选的,你可以把一个gem的多个目录加入到装载路径中。

Gemspec提供基本的信息,让你知道gem包含的内容,一个简单例子:

`
% cat freewill.gemspec
Gem::Specification.new do |s|
s.name = ‘freewill’
s.version = ‘1.0.0’
s.date = ‘2010-04-27’
s.summary = “Freewill!”
s.description = “I will choose Freewill!”
s.authors = [“Nick Quaranto”]
s.email = 'nick@quaran.to
s.homepage = ‘http://example.com'
s.files = [“lib/freewill.rb”]
end

来源What is a gem?