«前の日記(2015-05-13) 最新 次の日記(2015-06-13)» 編集

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2015-05-14 複数の OS やアーキテクチャでホームディレクトリを共有している環境で rbenv を使う方法

複数の OS やアーキテクチャでホームディレクトリを共有している環境で rbenv を使う方法

rbenv を使っていると各バージョンの Ruby が $HOME/.rbenv/versions 以下にインストールされ、 $HOME/.rbenv/shims/ruby などを経由して実行されますが、GNU/Linux と FreeBSD などでホームディレクトリを共有している場合は、FreeBSD でビルドした Ruby のバイナリは Linux では実行できない(逆はできる)ので、これでは都合が悪い場合があります。同じ Linux を使っていても amd64 と i686 などアーキテクチャが違えばバイナリ互換性がない場合があるので、同様のトラブルが発生します。

これを回避するには RBENV_ROOT 環境変数を設定して、OS やアーキテクチャごとに異なるディレクトリ以下に Ruby がインストールされるようにします。rbenv init - を実行する前に設定していなければならないので、例えば以下のように。例では zsh を使っているので .zshenv を書き換えます。

export RBENV_ROOT=$HOME/.rbenv/$(uname)
[ -x "$(which rbenv)" ] && eval "$(rbenv init - zsh)"

こうすると、Linux 環境では $HOME/.rbenv/Linux に、FreeBSD 環境では $HOME/.rbenv/FreeBSD 以下に rbenv の環境が構築されそれぞれにあった方を使ってくれるようになります。ただこのままではアーキテクチャを考慮しないので、少し変更して以下のようにするのがいいかもしれません。

 export RBENV_ROOT=$HOME/.rbenv/$(uname -r).$(uname -m)

hostname を個別に設定しているなら、hostname を使って

 export RBENV_ROOT=$HOME/.rbenv/$(hostname)

でもいいかも。