3月 292013
<< Ruby書くならBundler使え || rvmからrbenvに乗り換えた >>
関連 crontabでRVMのRubyを使う
crontabの頭で環境変数PATHに ~/.rbenv/shims を入れておけばおk
うちではこんなふうになっている
SHELL=/usr/local/bin/zsh
HOME=/Users/sho
PATH=/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/$HOME/bin:$PATH
PATH=$HOME/.rbenv/shims:$PATH
## この下にcrontabが書かれている
ちゃんと切り替えれているか確認
ruby -vでバージョンがでるので、* * * * * ruby -v > $HOME/ruby_versionと書いておけばホームディレクトリにruby_versionというファイルが毎分書き出される
これがrbenvでglobal設定したrubyになっているか確認する。
ちゃんとPATHに $HOME/.rbenv/shims が追加できていれば2.0.0とか書き込まれる。
ディレクトリ毎の確認
rbenv local 1.9.2-p320でそのディレクトリに .ruby-version というrbenvの設定ファイルができる
これがあると、そのディレクトリに入ったらrbenvが切り替わる。
また、rbenv-rehashというgemを入れておけば自動的にrehashしてくれる。
gem install rbenv-rehash
1.9.2にだけarduino_firmata gemを入れて、ディレクトリ毎にrbenv切り替えがcrontab上でも有効なのか試す
mkdir ~/tmp/1.9.2
cd ~/tmp/1.9.2
rbenv local 1.9.2-p320 # .ruby-versionが生成される
gem install arduino_firmata
arduino_firmata -v
で、crontabに書く
* * * * * arduino_firmata -v > $HOME/arduino_version
* * * * * cd $HOME/tmp/1.9.2 && arduino_firmata -v > $HOME/tmp/1.9.2/arduino_version
ホームディレクトリではrbenvのglobaで設定されているRuby2.0.0が使われたので、arduino_firmata gemがインストールされていなくてコマンド実行失敗していた。
tmp/1.9.2にcdした方はちゃんとRuby1.9.2に切り替わっていて、gemで入れたarduino_firmataコマンドへのパスも通っていた。
tmp/1.9.2/arduino_versionには ArduinoFirmata v0.2.8 と書かれていた。
cronで使うまとめ
アプリのディレクトリ毎に- crontabの一番上で PATH=$HOME/.rbenv/shims:$PATH
- アプリ毎にGemfileを作ってbundlerでgem管理
- アプリのディレクトリに .ruby-version作って、rbenvのバージョンも合わせる
- アプリのディレクトリにcdで移動してから実行
これで複数バージョンのRubyをcrontabで使える。