@koshian's Tech Log

主に日本語に関する技術などこちらに書こうかと

さくらのレンタルサーバに ruby 2.3.0 を入れても nokogiri がインストールできない俺に向けてのメモ

さくらインターネットレンタルサーバは安価で非常に便利なのだが、 ruby が 1.8 と大変古い。新しい物をコンパイルして入れればいいのだが、最近は git がレンタルサーバに入ってるので、 rbenv と ruby-build のサイト通りにやれば比較的簡単にインストールできる。

github.com

github.com

上記サイト通りに、

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ . ~/.bash_profile

とやっておけばよろしい。

ただこれだけだと iconv が見つからないと言われて nokogiri のインストールで失敗する。他にも /tmp に書き込めないなどのトラブルがあるので、以下のような行を ~/.bash_profile に追加しておく。もちろん source しておくように。

CPATH=/usr/local/include:$CPATH; export CPATH
LD_LIBRARY_PATH=$HOME/local/lib:/usr/local/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
LIBRARY_PATH=$HOME/local/lib:/usr/local/lib:$LIBRARY_PATH
export LIBRARY_PATH

TMPDIR=$HOME/tmp; export TMPDIR

これであとは、

$ rbenv install 2.3.0
$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-freebsd9.1]
$ gem install bundler nokogiri

これで普通に ruby が使えるようになる。

ただ cron に登録するときは環境変数などの設定をぜんぜん読み込んでくれないのでちょっと工夫が必要になる。

#!/bin/sh
    PATH=$HOME/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:$PATH; export PATH
    exec ruby -S -x $0 "$@"
#! ruby

ruby スクリプトの行頭をこんな感じで始めるのだ。shebang は sh にしておいて、適切に PATH を設定してやってから ruby を起動し、このスクリプト自身を ruby に読ませる。こうすることでさくらインターネット以外の普通に ruby が入ってる環境でも普通に実行できるようになる。

もちろん CGI も同様にしてやればちゃんと動作するのだが、CGI で呼び出された場合は環境変数 HOME がセットされてないので、

#!/bin/sh
    if [ -z $HOME ];then HOME=/home/koshian; export HOME; fi
    PATH=$HOME/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:$PATH; export PATH
    exec ruby -S -x $0 "$@"
#! ruby

というようにしてレンタルサーバでの HOME を書いておいてやらねばならない。