需要在本地或组织内部提供 gems?
有时您可能希望运行自己的 gem 服务器。当您和同事都无法连接到互联网时,您可能希望与同事共享 gems。您可能拥有私有代码,这些代码在您的组织内部,您希望将其作为 gems 分发和管理,而不会公开源代码。
有几种方法可以设置服务器来托管来自您组织内部的 gems。本指南涵盖了 Gemstash、Gem in a Box 和 Gemirro 项目。它还讨论了如何在开发过程中使用这些服务器作为 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.