位置:首页 > Ruby > Ruby gem包管理使用指南与gem源搭建教程

Ruby gem包管理使用指南与gem源搭建教程

时间:2026-08-17  |  作者:清风无痕  |  阅读:0

RubyGems 几乎是每一个 Ruby 开发者都绕不开的工具,它就像是 Ruby 世界的“应用商店”,帮我们管理着各种各样的代码库。说实话,一开始接触时可能会被一堆命令绕晕,但其实核心用法就那么几个,掌握之后效率会提升不少。下面就来系统过一遍。

Ruby中的gem包管理的使用及gem源搭建教程

日常高频指令

先列几个平时最常用的操作,记牢它们基本就能应对绝大多数场景了:

  • gem -v —— 查看当前 RubyGems 的版本
  • gem update --system —— 升级 RubyGems 自身
  • gem install gem_name —— 安装某个指定的 gem
  • gem install -v x.x.x gem_name —— 安装特定版本的 gem
  • gem list —— 列出本地已安装的所有 gem
  • gem update gem_name —— 更新某个具体 gem
  • gem update —— 一口气更新所有已安装的 gem
  • gem uninstall gem_name —— 卸载不再需要的 gem

有一点值得留意:默认情况下,安装 gem 时会顺带生成该库的 RDoc 和 ri 文档文件。如果你不打算看本地文档(大多数人其实都用在线文档),完全可以跳过这个步骤,省点时间和磁盘空间。安装时加上 --no-ri --no-rdoc 参数就行:

gem install gem_name --no-ri --no-rdoc

如果觉得每次都要敲参数太烦,可以在用户目录 ~ 下新建一个 .gemrc 文件,写入下面这行配置,以后所有 gem 操作都会默认跳过文档生成:

gem: --no-ri --no-rdoc

国内镜像源

服务器在国内的朋友应该都体会过直接连 rubygems.org 安装 gem 的“酸爽”——下载速度慢、甚至超时失败,简直折磨。好消息是,国内有淘宝(现在是 Ruby China)提供的镜像源,切换之后世界就清净了。

操作步骤也很简单:

$ gem sources --remove https://rubygems.org/
$ gem sources -a http://ruby.taobao.org/
$ gem sources -l

如果执行 gem sources -l 后看到类似下面的输出,说明切换成功了:

*** CURRENT SOURCES ***

http://ruby.taobao.org/

另外,如果你用 Bundler 来管理 gem 依赖,只需将 Gemfile 顶部的源地址改一下即可:

source 'http://ruby.taobao.org/'

gem 'rails', '3.2.2'
... ... ...

亲手制作并分享一个 Ruby Gem

作为开发者,除了消费别人的 gem,很多时候也需要把自己的代码打包发布,供团队或社区使用。整个过程其实比你想象的要简单。官方给出的三条命令就已经概括了核心流程:

gem update --system         # 确保 RubyGems 是最新版
gem build foo.gemspec        # 根据规范文件构建 gem 包
gem push foo-1.0.0.gem       # 将 gem 推送到 rubygems.org

接下来用一个具体例子一步步演示,假设我们要创建一个名为 topico 的 gem,版本号 0.0.1。

1. 准备目录结构

.
├── lib
│  └── topico.rb
└── topico.gemspec

注意:lib 目录下必须有一个与 gem 名同名的 .rb 文件,这是 RubyGems 的约定。

2. 编写核心代码(lib/topico.rb)

class Topico
 def self.hello
  puts "Hello, RubyGems!"
 end
end

3. 编写 gemspec 文件(topico.gemspec)

Gem::Specification.new do |s|
 s.name    = 'topico'
 s.version   = '0.0.1'
 s.date    = '2012-03-11'
 s.summary   = 'Greeting from Topico'
 s.description = 'Topico shows a greeting to RubyGems'
 s.authors   = 'Author Name'
 s.email    = 'username@username.com'
 s.files    = ["lib/topico.rb"]
 s.homepage  = 'http://rubygems.org/gems/topico'
end

这里只列出了最常用的一些属性,实际开发中你还可以添加依赖、许可证等更多元数据。

4. 编译生成 .gem 文件

$ gem build topico.gemspec

成功后会看到这样一条信息:

Successfully built RubyGem
 Name: topico
 Version: 0.0.1
 File: topico-0.0.1.gem

此时目录下多了一个 topico-0.0.1.gem 文件:

.
├── lib
│  └── topico.rb
├── topico-0.0.1.gem
└── topico.gemspec

5. 安装并测试 gem

先本地安装这个 gem:

$ gem install ./topico-0.0.1.gem

安装成功提示:

Successfully installed topico-0.0.1
1 gem installed
Installing ri documentation for topico-0.0.1...
Installing RDoc documentation for topico-0.0.1...

然后在 irb 里验证一下:

irb(main):001:0> require 'topico'
=> true
irb(main):002:0> Topico.hello
Hello, RubyGems!
=> nil

6. 发布到 RubyGems 网站

首先需要设置认证信息:

$ curl -u username https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials

输入密码后,认证文件就保存好了。接着执行推送:

$ gem push topico-0.0.1.gem

收到类似下面的反馈,就表示发布成功了。从此全世界的 Ruby 开发者都可以使用你贡献的 gem 了。

Pushing gem to https://rubygems.org...
Successfully registered gem: topico (0.0.1)

稍微复杂的示例:组织多个 Ruby 文件

如果 gem 包含多个代码文件,目录结构可以这样组织:

.
├── lib
│  ├── ext
│  │  └── calculation.rb
│  └── topico.rb
└── topico.gemspec

对应的 gemspec 中,s.files 需要列出所有文件:

s.files = ["lib/topico.rb", "lib/ext/calculation.rb"]

重新 gem build 即可。

如何在 Gem 中包含可执行文件

有些 gem 除了库代码,还提供命令行工具。做法很简单:

(1) 在 gem 根目录下创建 bin 文件夹,并生成一个可执行文件(记得修改权限为可运行):

$ mkdir bin
$ touch bin/greeting
$ chmod a+x bin/greeting

(2) 编辑 bin/greeting 文件内容:

#!/usr/bin/env ruby

require 'topico'
puts Topico.hello

(3) 在 gemspec 中添加 s.executables 配置:

s.executables << 'greeting'

之后执行 gem build 并安装,用户就能在命令行直接运行 greeting 命令了。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多