以前作った Sinatra アプリ(フォトビューワー)をデーモンとして動かそうとしてハマった記録。
Sinatra アプリをデーモン化したことは前にもやったことがあるので、基本的にはその時のエントリを見ながらやったんだけど、一つだけ、ハマりどころがあった。それはアプリが Ruby 2.0 以降(だっけ?)にサポートしているキーワード引数を使って書いてあるのに対して、システムにインストールされているのは Ruby 1.9.3 だってこと。ユーザーは rvm でインストールした 2.3.0 を使っているのでテスト中は動くけど、いざ本番になってみるとシステムの 1.9.3 が使われるので動かない。
どうにかしてデーモンにも rvm でインストールした 2.3.0 を使わせたい。
探し方が悪いのか、ググっても情報が出てこない。結局解決策を見つけたのは、自分のエントリだった。
つまり、起動スクリプトで GEM_PATH と GEM_HOME に rvm のパスを設定して export すればいいようだ。書いた起動スクリプトがこれ:
#!/bin/sh PATH=/home/potov/.rvm/rubies/ruby-2.3.0/bin:/home/potov/.rvm/gems/ruby-2.3.0/bin:/sbin:/bin:/usr/bin GEM_PATH=/home/potov/.rvm/gems/ruby-2.3.0 GEM_HOME=/home/potov/.rvm/gems/ruby-2.3.0 export PATH export GEM_PATH export GEM_HOME POTOV_ROOT=/home/potov/potov case "$1" in start) cd ${POTOV_ROOT} unicorn -c unicorn.conf -D ;; stop) PID=`cat ${POTOV_ROOT}/unicorn.pid` kill -QUIT ${PID} ;; *) echo "Usage: potov {start|stop}" exit 1 ;; esac exit 0
当然 PATH も rvm の Ruby のパスを設定している。
ともあれ、これで無事起動するようになった。