さくらVPSのUbuntu12.04のrvmをrbenvに切り替えた
関連
mac版橋本商会 » rvmからrbenvに乗り換えた
橋本商会 » crontabでrbenvのrubyを使う
準備
先にrubyをbuildするのに必要なaptを入れる(先にrvmを使っていたのでこれは必要なかったが)
sudo apt-get install build-essential libreadline-dev libssl-dev
rvmを消す
rvm seppuku
sudo rm -rf ~/.rvm
ホームディレクトリにrbenvを入れる
rbenvはaptにもあるけどruby-buildが無いので両方githubからcloneした。
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
mkdir ~/.rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenvへのパスを通す。 ~/.zshrc に書けばいい・・
export PATH=$PATH:$HOME/.rbenv/binと思いきや、screenを起動したりzsh上でzshを起動するとrbenvのパスより上に /usr/local/bin 等が来て、system rubyが使われてしまう現象が起きた。
eval "$(rbenv init -)"
rbenvのissueやドキュメントを確認したり調べてみると
Unix shell initialization · sstephenson/rbenv Wiki
インストールしたてのUbuntu12.04では /etc/zsh/zshrc や /etc/zlogin がPATHをいじってた。
一番最後にロードされるらしい ~/.zlogin にrbenvの設定を書いたらscreen上でもrbenvが正しくロードされた。
ruby 2.0.0インストール
rbenv -v
rbenv install --list | grep 2.0
rbenv install 2.0.0-p0
デフォルトでruby2.0使うようにする。
rbenv global 2.0.0-p02.0になってればok
rbenv rehash
ruby -v
gemをアップデートしたり、自動rehashするrbenv-rehashを入れたり
gem update --system
rbenv rehash
gem install rbenv-rehash bundler
rbenv rehash
jrubyもインストールする
rbenv install jruby-1.7.3
jrubyのソースコード置いてある場所でだけ、ruby2.0からjruby1.7に切り替えるようにする
cd ~/src/jrubyjrubyになっていればおk
rbenv local jruby-1.7.3
rbenv rehash
ruby -v
rubygemとbundlerをアップデートしたり、自動的にrehashするようにする。
gem update --systemこのディレクトリの下でだけjrubyが使われるようになる。
rbenv rehash
gem install rbenv-rehash bundler
rbenv rehash
crontabでrbenvのrubyを使う
crontabの上の方で、PATHの先頭に ~/.rbenv/shims を入れる。
あとはアプリのディレクトリまでcdしてからrubyを使うようにすれば、ちゃんとGemfileも.ruby-vesionも読んで実行してくれる。
HOME=/home/shokaijruby使うアプリもちゃんとrbenv切り替えて実行してくれてた。
PATH=/home/shokai/.rbenv/shims:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/home/shokai/bin
*/15 * * * * cd $HOME/src/ruby/twitter-change-profile && ruby change-profile.rb
*/20 * * * * cd $HOME/src/jruby/glitchicon && ruby bin/create_icon.rb $HOME/shokai.png /var/tmp/glitch_icon.png && ruby bin/upload.rb /var/tmp/glitch_icon.png
事前にcrontab上でrbenvが正しく動くかを確かめたほうがいい。
* * * * * echo $PATH > $HOME/cron-path.txtこういうの登録したらホームディレクトリに環境変数とか書き出す。
* * * * * ruby -v > $HOME/cron-ruby-version.txt
* * * * * cd $HOME/src/jruby && ruby -v > $HOME/cron-jruby-version.txt
なんだか知らんが、Macではできるのに、PATHへの代入の右項に$HOMEとか書いても変数展開されない現象が起きてた。
daemontoolsでrbenvのrubyを使う
daemontoolsはlogが確認しやすいので楽。
http://dev.shokai.org:4000 の起動スクリプト。
cronと同じようにパスの先頭にshimsを追加すればいい。
/etc/service/rocketio-chat/run
#!/bin/sh
exec 2>&1
exec setuidgid sho bash -c '
HOME=/home/shokai
PATH=$HOME/.rbenv/shims:$PATH
cd $HOME/src/sinatra/rocketio-chat-sample
WS_PORT=18080 rackup config.ru -p 4000
'