Railsをプロジェクト内に取り込む

| | トラックバック(0)

Rails自体をプロジェクト内に取り込む

Railsはシステムワイドにインストールして使うのが一般的だと思いますが、インストールされてるRailsのバージョンを気にしたり、ある日突然バージョンアップによって動かなくなったりするのを気にしたりしたくないので、プロジェクト内にインストールして使うようにしてみました。
こうしておくと、rubyがインストールされたシステムであれば、チェックアウトするだけですぐに動かす事ができるようになります。

rubygems をインストールする

"$TOPDIR/vendor/gems" にインストールします。
ドキュメントは必要ないのでインストールしません。

ruby setup.rb --prefix=$TOPDIR/vendor/gems --no-rdoc --no-ri

インストールした gem コマンドは直接は実行しないのですが、いちおう shebang を /usr/bin/env 経由で実行するように書き換えます。

vim $TOPDIR/vendor/gems/bin/gem
#!/usr/bin/env ruby

gem コマンドのラッパーを $TOPDIR/bin/gem に作ります。
環境変数 "$GEM_HOME" で rubygems がインストールされたディレクトリを指定します。
ruby の "-I" オプションで rubygems のライブラリのディレクトリを指定します。
今後はこれを実行する。

mkdir $TOPDIR/bin
vim $TOPDIR/bin/gem
#!/bin/sh
BIN_DIR=$(cd $(dirname $0); pwd)
TOP_DIR=$(dirname $BIN_DIR)
VENDOR_DIR=$TOP_DIR/vendor
GEM_DIR=$VENDOR_DIR/gems

GEM_HOME=$GEM_DIR /usr/bin/env ruby -I $GEM_DIR/lib \
$GEM_DIR/bin/$(basename $0) $*

ついでに ruby コマンドのラッパーも作る。

vim $TOPDIR/bin/ruby
#!/bin/sh
BIN_DIR=$(cd $(dirname $0); pwd)
TOP_DIR=$(dirname $BIN_DIR)
VENDOR_DIR=$TOP_DIR/vendor
GEM_DIR=$VENDOR_DIR/gems

GEM_HOME=$GEM_DIR /usr/bin/env ruby -I $GEM_DIR/lib $*

Railsをインストール

$TOPDIR/bin/gem を使って Rails をインストールします。
ドキュメントは必要ないのでインストールしません。
ドキュメントは大量にできるので、コミットすると大変な事になります。
最初ドキュメント込みで svk 使ってたら死にました。orz

$TOPDIR/bin/gem install --env-shebang --no-rdoc --no-ri rails

rails, rake コマンドのラッパーを作る。
$TOPDIR/bin/gem を汎用的に作っているので、シンボリックリンクをはるだけでおk。

ln -s gem $TOPDIR/bin/rails
ln -s gem $TOPDIR/bin/rake

プロジェクト開始

$TOPDIR/bin/rails コマンドでプロジェクトを開始する。

$TOPDIR/bin/rails $TOPDIR

動作確認

$TOPDIR/bin/ruby $TOPDIR/script/server

動いた!!\(^o^)/

今回はWebrick経由なので問題なく動いたけど、fcgi経由とかだと dispatch.* 辺りを調整しないとダメなはず。
その辺はまたやる。

トラックバック(0)

このブログ記事を参照しているブログ一覧: Railsをプロジェクト内に取り込む

このブログ記事に対するトラックバックURL: http://blog.bz2.jp/bz2mt/mt-tb.cgi/274

ウェブページ

Powered by Movable Type 4.21-ja

このブログ記事について

このページは、masatoが2008年9月19日 09:18に書いたブログ記事です。

ひとつ前のブログ記事は「SoftwareDesign10月号の特集記事を執筆しました」です。

次のブログ記事は「フィードがちゃんと配信されてなかった」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。