RubyGems 導覽選單
指南

需要為您的組織或本地端提供 gems 嗎?

有時您會想要執行自己的 gem 伺服器。當您和同事都沒有網路連線時,您可能想要分享 gems。您可能有一些組織內部的私人程式碼,您希望將其作為 gems 來散發和管理,而不會公開原始碼。

有幾個選項可以設定伺服器來主機組織內的寶石。本指南涵蓋 GemstashGem in a BoxGemirro 專案。它也討論如何在開發期間使用這些伺服器作為寶石來源。

執行 Gemstash

Gemstash 同時是遠端伺服器(例如 https://rubygems.org)的快取和私人寶石來源。

要開始,請安裝 gemstash

$ gem install gemstash

安裝後,使用下列指令啟動 Gemstash 伺服器

$ gemstash start

預設情況下,伺服器在埠 9292 上執行。

如果您想將其用作快取,您可以告訴 Bundler 使用 Gemstash 從 RubyGems.org 尋找寶石

$ bundle config mirror.https://rubygems.org https://127.0.0.1:9292

使用此組態,透過 bundler 從 RubyGems.org 擷取的所有寶石都會由 Gemstash 快取。

您也可以推送您自己的寶石,並使用 gemstash 伺服器作為私人寶石來源。有關 gemstash 功能和指令的更多資訊,請閱讀 Gemstash 文件。

執行 Gem in a Box

對於具有更多功能的伺服器,包括推送寶石的能力,請試用 Gem in a Box 專案。

要開始,請安裝 geminabox

[~/dev/geminabox] gem install geminabox

建立一個用於儲存寶石的資料目錄

[~/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 指令推送寶石。您第一次執行此操作時,系統會提示您輸入寶石伺服器的位址。

[~/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:  https://127.0.0.1:9292
Pushing secretgem-0.0.1.gem to https://127.0.0.1:9292/...

https://127.0.0.1:9292 上也有可用的網頁介面。有關更多資訊,請閱讀 Gem in a box README。

執行 Gemirro

如果您需要一個簡單的應用程式,讓您可以輕鬆建立您自己的 RubyGems 鏡像,而無需推送或在組態檔中撰寫所有您想要的寶石,請試用 Gemirro。它在沒有任何驗證的情況下進行鏡像,您可以在寶石目錄中新增您的私人寶石。此外,要鏡像來源,您只需要啟動伺服器,寶石就會在需要時自動下載。

要開始,請安裝 gemirro

$ gem install gemirro

設定鏡像的過程相當容易,可以在幾秒鐘內完成。

第一步是設定一個新的空鏡像目錄。這透過執行 gemirro init 指令來完成。

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

建立後,你可以編輯名為 config.rb 的主設定檔。此設定檔指定要鏡像的來源、目的地目錄、伺服器主機和埠等。

設定完成後,如果你在 define_source 中新增 gem,你可以透過執行下列指令來提取它們

$ gemirro update

下載所有 Gem 後,你需要產生所有已安裝檔案的索引。這可以透過下列方式完成

$ gemirro index

最後,啟動伺服器,所有要求都會檢查是否偵測到 gem,必要時下載它們並立即產生索引。

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

網頁介面會在 https://127.0.0.1:2000 上提供。

如需更多資訊,請閱讀 Gemirro 的 README。

從你的伺服器使用 gem

無論你使用 Gemstash、Gem in a Box、Gemirro 或其他 gem 伺服器,你都可以設定 RubyGems 使用你的本機或內部來源,以及其他來源,例如 http://rubygems.org

使用 gem sources 指令將 gem 伺服器新增到你的系統範圍 gem 來源。下列 URL 是透過 rackup 執行 Gem in a Box 的預設值

gem sources --add https://127.0.0.1:9292

然後像往常一樣安裝 gem

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

如果你使用 Bundler,則可以在 Gemfile 中將此伺服器指定為 gem 來源

[~/dev/myapp] cat Gemfile
source "https://127.0.0.1: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.