RubyGems 导航菜单
指南

需要在本地或组织内部提供 gems?

有时您可能希望运行自己的 gem 服务器。当您和同事都无法连接到互联网时,您可能希望与同事共享 gems。您可能拥有私有代码,这些代码在您的组织内部,您希望将其作为 gems 分发和管理,而不会公开源代码。

有几种方法可以设置服务器来托管来自您组织内部的 gems。本指南涵盖了 GemstashGem in a BoxGemirro 项目。它还讨论了如何在开发过程中使用这些服务器作为 gem 源。

运行 Gemstash

Gemstash 既是远程服务器(例如 https://rubygems.org.cn)的缓存,也是私有 gem 源。

要开始,请安装 gemstash

$ gem install gemstash

安装完成后,使用以下命令启动 Gemstash 服务器

$ gemstash start

默认情况下,服务器在端口 9292 上运行。

如果您想将其用作缓存,您可以告诉 Bundler 使用 Gemstash 从 RubyGems.org 查找 gems。

$ bundle config mirror.https://rubygems.org.cn http://localhost:9292

使用此配置,通过 bundler 从 RubyGems.org 获取的所有 gems 将被 Gemstash 缓存。

您也可以推送自己的 gems 并使用 gemstash 服务器作为私有 gemsource。有关 gemstash 功能和命令的更多信息,请阅读 Gemstash 文档。

运行 Gem in a Box

对于具有更多功能的服务器,包括推送 gems 的功能,请尝试使用 Gem in a Box 项目。

要开始,请安装 geminabox

[~/dev/geminabox] gem install geminabox

为存储 gems 创建一个数据目录

[~/dev/geminabox] mkdir data

config.ru 文件中包含以下内容

[~/dev/geminabox] cat config.ru
require "rubygems"
require "geminabox"

Geminabox.data = "./data"
run Geminabox::Server

并运行服务器

[~/dev/geminabox] rackup
[2011-05-19 12:09:40] INFO  WEBrick 1.3.1
[2011-05-19 12:09:40] INFO  ruby 1.9.2 (2011-02-18) [x86_64-darwin10.5.0]
[2011-05-19 12:09:40] INFO  WEBrick::HTTPServer#start: pid=60941 port=9292

现在您可以使用 gem inabox 命令推送 gems。第一次执行此操作时,系统会提示您输入 gem 服务器的位置。

[~/dev/secretgem] gem build secretgem.gemspec
  Successfully built RubyGem
  Name: secretgem
  Version: 0.0.1
  File: secretgem-0.0.1.gem
[~/dev/secretgem] gem inabox ./secretgem-0.0.1.gem
Enter the root url for your personal geminabox instance. (E.g. http://gems/)
Host:  http://localhost:9292
Pushing secretgem-0.0.1.gem to http://localhost:9292/...

还有一个 Web 界面可供使用,地址为 http://localhost:9292。有关更多信息,请阅读 Gem in a box README。

运行 Gemirro

如果您需要一个简单的应用程序,可以轻松地创建您自己的 RubyGems 镜像,而无需推送或在配置文件中写入所有您想要的 gem,请尝试使用 Gemirro。它进行镜像无需任何身份验证,您可以在 gems 目录中添加您的私有 gems。此外,要镜像源,您只需要启动服务器,gems 将在需要时自动下载。

要开始,请安装 gemirro

$ gem install gemirro

设置镜像的过程非常简单,可以在几秒钟内完成。

第一步是设置一个新的空镜像目录。这可以通过运行 gemirro init 命令来完成。

$ gemirro init /srv/http/mirror.com/

创建完成后,您可以编辑名为 config.rb 的主配置文件。此配置文件指定要镜像的源、目标目录、服务器主机和端口等。

配置完成后,如果您在 define_source 中添加了 gem,您可以通过运行以下命令来拉取它们

$ gemirro update

所有 Gems 下载完成后,您需要生成所有已安装文件的索引。这可以通过以下方式完成

$ gemirro index

最后,启动服务器,所有请求将检查是否检测到 gems,并在必要时下载它们并立即生成索引。

$ gemirro server --start
$ gemirro server --status
$ gemirro server --restart
$ gemirro server --stop

将在 http://localhost:2000 提供一个 Web 界面。

有关更多信息,请阅读 Gemirro 自述文件。

使用来自您服务器的 gems

无论您使用 Gemstash、Gem in a Box、Gemirro 还是其他 gem 服务器,您都可以配置 RubyGems 以使用您的本地或内部源,以及其他源,例如 https://rubygems.org.cn

使用 gem sources 命令将 gem 服务器添加到您的系统范围 gem 源。以下 URL 是通过 rackup 运行 Gem in a Box 的默认 URL

gem sources --add http://localhost:9292

然后像往常一样安装 gems

[~] gem install secretgem
Successfully installed secretgem-0.0.1
1 gem installed

如果您使用的是 Bundler,那么您可以在您的 Gemfile 中指定此服务器作为 gem 源

[~/dev/myapp] cat Gemfile
source "http://localhost:9292"
gem "secretgem"

[~/dev/myapp] bundle
Using secretgem (0.0.1)
Using bundler (1.0.13)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.