関連 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で使える。