1

crontabでRVMのRubyを使う

ruby の代わりに、 $HOME/.rvm/bin/ruby-1.9.2-p320 などを使えばいいらしい。
rvmそれぞれの環境でインストールしたrubygemsにもパスが通って使えるようになる。

このファイルは中身を見るとシェルスクリプトで、rvm use 1.9.2-p320しながら引数をrubyに渡す感じになってる。


俺普段Ruby1.9か2.0使ってるんだけど、今までなんか面倒くさくてRuby1.8でも動くようにプログラム書いてsystem rubyにも同じgemインストールして動かしてた。

前に書いた自動日記をtwitterに流すようにしたってやつも、こうしたらRuby1.9で毎日1時にtweetするようになった。

0 1 * * * cd $HOME/src/ruby/autodiary && $HOME/.rvm/bin/ruby-1.9.2-p320 autodiary.rb -tweet shokai > /dev/null 2>&1
autodiaryのディレクトリに置いてあるGemfileも読まれてちゃんと動く。good.
crontabの上の方で環境変数をゴニョゴニョするとかshellも全く必要なし。


参考:RVM: Ruby Version Manager – Using Cron with RVM

0

rvmのJRuby1.6.7でnailgunを使わない設定と、起動速度を2倍にする方法

最近のバージョンから勝手にnailgunが起動するようになってた。

~/.rvm/hooks/after_use_jruby でnailgun起動してJRUBY_OPTSに-ng追加してるのをコメントアウトで止めたら解決した。

#!/usr/bin/env bash

. "${rvm_path}/scripts/functions/hooks/jruby"

if [[ "${rvm_ruby_string}" =~ "jruby" ]]
then
# jruby_ngserver_start
# jruby_options_append "--ng" "${PROJECT_JRUBY_OPTS[@]}"
else
# jruby_options_remove "--ng" "${PROJECT_JRUBY_OPTS[@]}"
jruby_clean_project_options
fi
 

JVMの起動が遅いので、起動済みJVMを使いまわすnailgunというのがある。
jruby –ng-server で起動して、 jruby –ng foo.rb でnailgun上でfoo.rbを実行できる。

スクリプト実行するまでの起動時間がめちゃくちゃ速くなってほぼゼロになる、なぜなら起動しっぱなしだから
というシステムなのだが開発中のウマくないプログラムがnailgunごと死んでしまうので、面倒だから止めたかったのだった。



nailgun無しだとMacbookAirの場合JRubyの起動毎に5秒以上かかるのだが、
export 'JRUBY_OPTS=-X-C'
export 'JAVA_OPTS=-d32'
しておくと2秒になる。
Macはふだん64bit server版のJVMを使っているが-d32を指定すると32bit client版が起動して速くなる。