2011/06/06
rvmでシェルスクリプト内でrubyのバージョンを選択する
rvmで複数のrubyをインストールしている環境で、シェルスクリプト内で特定のバージョンのrubyでプログラム(今回はredmine1.2.0)を実行する方法。
helpを見れば一発のはずだが、数時間ハマって悔しいので記録しておく。
環境
ruby1.9.2の環境にはrails3.0.7がインストールされているが、redmineはruby1.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
リンク元
- 75 http://pipes.yahoo.com/pipes/pipe.info?_id=tDfBdGWF3RGl9XNm1L3fcQ
- 20 http://pipes.yahoo.com/pipes/pipe.info?_id=242f50e5030d8e9e73ce52013bcbf820
- 19 http://www.google.co.jp/url?sa=t&rct=j&q=シェルスクリプト rvm&source=web&cd=1&ved=0CBsQFjAA&url=http://d.hatena.ne.jp/chronogazer/20110606/1307382321&ei=sT-FTu-yCOnhmAWwmvgC&usg=AFQjCNE
- 17 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCgQFjAA&url=http://d.hatena.ne.jp/chronogazer/20110606/1307382321&ei=3w1jT8vAN8iUiAfM5cnrBQ&usg=AFQjCNESNfgdEFHU2ghUiybMEmrsOvRTzQ
- 13 http://www.google.co.jp/url?sa=t&rct=j&q=rvm シェルスクリプト&source=web&cd=1&ved=0CB0QFjAA&url=http://d.hatena.ne.jp/chronogazer/20110606/1307382321&ei=vTS7TsHaPOKcmQWgp7CRCA&usg=AFQjC
- 12 http://twitter.com/
- 9 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=Please+use+'task+:+t,+[args]+=>+[deps]'+instead&aq=f&aqi=&aql=&oq=
- 8 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http://d.hatena.ne.jp/chronogazer/20110606/1307382321&rct=j&q=Please use 'task :t, [args] => [deps]' instead.&ei=sYDtTfmmNIuivQPknqXHBg&usg=AFQjCN
- 7 http://www.google.co.jp/url?sa=t&rct=j&q=rvm+シェルスクリプト&source=web&cd=1&ved=0CCMQFjAA&url=http://d.hatena.ne.jp/chronogazer/20110606/1307382321&ei=enjlTqiLL-rJmQX7m4X0BA&usg=AFQjCNE
- 5 http://t.co/nDb0ebQ
