geminaboxでローカルにgemをホストする

geminaboxを使ってローカルにgemをホストしてみる。

(とりあえずでやってみただけなので、手順等にミスがあるかも)

まずはサーバを立てる

rvmとpowが入っている前提で。 ~/var/geminabox 以下を使うとする。

$ rvm use 1.8.7@geminabox --create
$ gem install geminabox
$ mkdir -p ~/var/geminabox/data
$ echo "rvm use 1.8.7@geminabox" > ~/var/geminabox/.rvmrc
$ echo 'require "rubygems"
require "geminabox"

Geminabox.data = "#{ENV['HOME']}/var/geminabox/data"
run Geminabox
' > ~/var/geminabox/config.ru
$ ln -s $HOME/var/geminabox $HOME/.pow

これで http://geminabox.dev/ にアクセスすればgeminaboxでホストしているgem一覧が表示される。

つぎにgemを追加する

たとえばhello-0.0.1.gemrubygems.orgから落としてきて追加する。

$ wget http://rubygems.org/downloads/hello-0.0.1.gem
$ gem inabox hello-0.0.1.gem

これをやると http://geminabox.dev/ の一覧に追加される。

使ってみる

$ gem sources -a http://geminabox.dev/

もしくは~/.gemrcのsourcesに手動で追加する。

:sources:
- http://geminabox.dev
- http://rubygems.org

bundlerだったらGemfileに追記する。

source "http://geminabox.dev"
source :rubygems

では実際にインストールしてみる。

$ gem install hello
Successfully installed hello-0.0.1
1 gem installed

できた!

最後に

powとrvmのペアが最強すぎる。サーバをいちいち立ち上げる必要もないし、geminaboxの依存するgemと開発用のgemとが混在することもない。

あとはrubygems.orgから一度落としたやつをgeminaboxにコピーすることができたら完璧だ。 gemコマンドのフックってできないのかな?