Hatena::ブログ(Diary)

技術メモ for me このページをアンテナに追加 RSSフィード Twitter

2011/06/06

rvmでシェルスクリプト内でrubyのバージョンを選択する

rvmで複数のrubyをインストールしている環境で、シェルスクリプト内で特定のバージョンのrubyでプログラム(今回はredmine1.2.0)を実行する方法。

helpを見れば一発のはずだが、数時間ハマって悔しいので記録しておく。


環境

OS
Mac OS X 10.6
rvm
1.6.9
ruby
1.9.2(default) / 1.8.7

ruby1.9.2の環境にはrails3.0.7がインストールされているが、redmineruby1.8.7 + rails2.3.11ではないと動作しないとのことだったので、それ用に1.8.7をインストールした。

(参考までに)ruby1.8.7環境構築

rvm install 1.8.7
rvm use 1.8.7
rvm gemset create redmine
rvm gemset use redmine
gem install rails -v 2.3.11
gem install rails rack -v=1.1.1
gem install sqlite3
gem install -v=0.4.2 i18n

gemsetはglobalのままでも問題ないと思うが、念のため作成した。また、gemset名がredmineなのは、参考にさせていただいたサイト*1の完全な受け売り。

(参考までに)redmineのインストール

cd ~/lab
svn co http://redmine.rubyforge.org/svn/branches/1.2-stable redmine-1.2
cd redmine-1.2
vi config/database.yml   #database.yml.exampleを元に作成。DBはsqlite3。
rake generate_session_store
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data    #jaを選択。

なお、上記作業中に以下のWARNINGが何度か出たが気にせず進めても問題なさそう。

WARNING: 'task :t, arg, :needs => [deps]' is deprecated.  Please use 'task :t, [args] => [deps]' instead.

シェルスクリプトを用いない直接起動

前置きが長くなったが、本題に入る。

ここまででインストールしたredmineを起動する。bash上から以下のように起動すると問題なく起動する。

rvm use 1.8.7@rails2
/Users/{username}/Lab/redmine-1.2/script/server -e production --port 3333

しかし、上記コマンドをシェルスクリプトに記載して実行すると、以下のような出力となり起動できない。

Last login: Tue Jun  7 02:05:12 on ttys000
/Users/{username}/Desktop/redmine.sh ; exit;      #作成したシェルスクリプト
Using /Users/{username}/.rvm/gems/ruby-1.8.7-p334 with gemset rails2
Missing the i18n 0.4.2 gem. Please `gem install -v=0.4.2 i18n`
logout

どうやら、rvmの設定は~/.bash_profile内で呼びこまれているらしく、シェルスクリプト(#!/bin/bash)起動では読み込まれないようだ。

色々悩んだが、シェルスクリプトを以下のように書いたら解決した。-Sオプションで起動するスクリプトを選べるらしい。

#!/bin/bash
rvm use 1.8.7@rails2 -S /Users/{username}/Lab/redmine-1.2/script/server -e production --port 3333

ちなみに、前述の通りこの事はrvmのhelpにバッチリ書いてあった。

教訓:ググる前にhelp。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/chronogazer/20110606/1307382321