ポイント
- ウェブアプリは Apache で設定した、Passenger をインストールした Ruby を使用する。rbenv で指定した Ruby は使用されない。
ポイントから言えそうなこと!
- rbenv local でディレクトリにバージョンを設定しても、Apache の Passenger 設定が有効になってしまう。
- rbenv local や rbenv global で設定した Ruby バージョンと Apache の Passenger 設定とを連携させられれば理想的。誰か実現していそうなものだが。。。
まとめの位置づけで、実際に起きた現象を説明しますの♪
Ruby 2.1.0 環境で Redmine をインストールしました。
その後、rbenv で Ruby 1.9.3-p484 に切り替えました。単純に「rbenv global 1.9.3-p484」しただけですの。
そうしてどのように動くかを確認しますと、どうやら次のようになっているのではないかしら?
- Apache(Ruby 2.1.0 配下 Passenger を指定したまま)
- → Passenger 4.0.37(Ruby 2.1.0 配下にある)
- → Ruby 1.9.3-p484 を呼べる?呼べなかった。Ruby 2.1.0 が呼ばれた。
rbenv で Ruby のバージョンを切り替えても無視されて、Apache の Passenger 設定で指定した Passeger、そしてその Ruby を呼び出しているようでしたわ。
順を追って手順を振り返ってみます♪
詳しく説明してみますわね。
rbenv で Ruby 2.1.0 をインストールしました。そして Ruby 2.1.0 の gem install で Passenger をインストール。さらに passenger-install-apache2-module で Apache モジュールをインストールしました。Apache の設定には、使用する passenger_module の場所として、Ruby 2.1.0 配下の mod_passenger.so を指定いたしました。そして Redmine をインストールしました。
ここまでが、先ほど紹介しましたリンク先で以前行ったことでございます。
この状態から、「rbenv install 1.9.3-p484」で Ruby 1.9.3-p484 をインストールしました。「rbenv global 1.9.3-p484」で Ruby のバージョンを 1.9.3-p484 に切り替えましたの。
このときに、Redmine の管理 > 情報にアクセスいたします。
すると表示される Ruby バージョンは 2.1.0-p0 (2013-12-25) [i686-linux] でしたの!1.9.3-p484 と思っておりましたのに!
以上のことから結論ですわ!
- rbenv で Ruby のバージョンを切り替えるときは、Passenger も切り替えないとウェブアプリ側の Ruby バージョンが切り替わらない。
おそらくですけれども、切り替えた後の Ruby 側で Passenger の gem インストール、passenger-install-apache2-module を行い、Apache 設定を書き換えれば Ruby のバージョンを変更してウェブアプリを使用できるのではないかしら?
切り替えられるか、お試しにやってみますの♪
試す前の現在の環境ですの。
- Ruby 2.1.0(rbenv でインストール)
- Passenger 4.0.37(Ruby 2.1.0 上)
- passenger_module(Ruby 2.1.0 上)
- Apache 設定(Ruby 2.1.0 でインストールした Passenger を設定)
試した結果こうなったら素敵ですわ♪という目標ですの。
- Ruby 1.9.3-p484(rbenv でインストール)
- Passenger 4.0.37(Ruby 1.9.3-p484 上)
- passenger_module(Ruby 1.9.3-p484 上)
- Apache 設定(Ruby 1.9.3-p484 でインストールした Passenger を設定)
次のようにして Ruby 1.9.3-p484 のウェブアプリケーション環境を作っていきました。
なお、パスを設定しているところがございますが、ImageMagick をソースからインストールしてパスを設定していないことが原因ですの。詳しくは次の投稿で確かめております。
# Ruby 1.9.3-p484 インストール rbenv install 1.9.3-p484 rbenv rehash rbenv global 1.9.3-p484 # Ruby 1.9.3-p484 に bundler インストール gem install bundler # rmagick をインストールするためパスを設定(ImageMagick をソースからインストールしたため) export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig # Ruby 1.9.3-p484 に Redmine で必要なライブラリをインストール cd /var/lib/redmine/ bundle install --without development test # Ruby 1.9.3-p484 に Passenger をインストール gem install passenger --no-rdoc --no-ri rbenv rehash passenger-install-apache2-module rbenv rehash # Ruby 1.9.3-p484 版 Passenger 用の Apache 設定を記述 vim /etc/httpd/conf.d/passenger.conf
Ruby 1.9.3-p484 版 Passenger 用の Apache 設定は次のように記述いたしました。Ruby 2.1.0 用のパス記述をコメントにし、1.9.3-p484 用のパスを追加しただけですの。他の部分は変更しておりませんので割愛いたします。
#LoadModule passenger_module /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so #<IfModule mod_passenger.c> # PassengerRoot /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/passenger-4.0.37 # PassengerDefaultRuby /root/.rbenv/versions/2.1.0/bin/ruby #</IfModule> LoadModule passenger_module /root/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /root/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/passenger-4.0.37 PassengerDefaultRuby /root/.rbenv/versions/1.9.3-p484/bin/ruby </IfModule>
そして、Apache を再起動して完了です!
/etc/init.d/httpd restart
では確認してみましょう♪
Redmine の管理 > 情報にアクセスすると、、、OK!Ruby バージョンが 1.9.3-p484 です!
この後、更に調査いたしました。rbenv での切替え不要ではないかしら?
/etc/httpd/conf.d/passenger.conf の使用 Passenger を切り替えるだけで、Redmine が使う Ruby を切り替えることができました。
つまり、rbenv で Ruby バージョンを変更する必要はありませんでしたの!
おわりに
Ruby のバージョンを rbenv で切り替えた直後に動きを確認してみましても、Redmine がそのまま動いたことに首をかしげたことがきっかけでしたの。
不思議でした。
そこで、Redmine から Ruby のバージョンを調べてみましたら切り替わっておりませんでしたの。
そんなことから、今回の投稿でございました♪
以上です。