カテゴリー
Linux

【rbenv】ウェブアプリの場合は rbenv で Ruby バージョンを切り替えただけじゃダメでしたの!

ポイント

  • ウェブアプリは 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」しただけですの。

そうしてどのように動くかを確認しますと、どうやら次のようになっているのではないかしら?

  1. Apache(Ruby 2.1.0 配下 Passenger を指定したまま)
  2. → Passenger 4.0.37(Ruby 2.1.0 配下にある)
  3. → 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 のバージョンを変更してウェブアプリを使用できるのではないかしら?

切り替えられるか、お試しにやってみますの♪

試す前の現在の環境ですの。

スクリーンショット 2014-02-11 18.28.22.png

  • 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 です!

スクリーンショット 2014-02-11 18.19.03.png

この後、更に調査いたしました。rbenv での切替え不要ではないかしら?

/etc/httpd/conf.d/passenger.conf の使用 Passenger を切り替えるだけで、Redmine が使う Ruby を切り替えることができました。

つまり、rbenv で Ruby バージョンを変更する必要はありませんでしたの!

おわりに

Ruby のバージョンを rbenv で切り替えた直後に動きを確認してみましても、Redmine がそのまま動いたことに首をかしげたことがきっかけでしたの。

不思議でした。

そこで、Redmine から Ruby のバージョンを調べてみましたら切り替わっておりませんでしたの。

そんなことから、今回の投稿でございました♪

以上です。

コメントを残す