【メモ】RubyをアップデートしたらPassengerでBundler::LockfileErrorが出た
はじめに
お久しぶりかついつものごとくな雑備忘録でございます。
今回はあるサーバーで動いているRailsアプリケーションとRubyのバージョンを更新したあと、Passengerが動かなくなったというお話です。
原因自体はめっちゃ単純だったので、正直メモにする必要もあるのかといえば微妙ですが、「まああくまで自分用メモという体裁だしそんな高尚なものでなくていいか」ということで。
環境としてはOSがCentOS 6で、Apache + Passenger + Railsという構成です。
経緯
今回の要件としては、既存のWebアプリケーションを構成するRubyとRailsのバージョンがそれぞれ少し古くなっていたので、それを更新するというものでした。
こういう作業はそんなに経験がある方ではないのでちょっと心配していたんですが、作業としては詰まったところといえばgccとg++の更新も必要だったとかそれぐらいで、比較的順調に進みました。
それでRubyとRailsの更新も終わり、Apacheの起動も無事に完了しさて動作確認、とブラウザで該当のサイトを開くとPassengerのエラーが。
おや、と思いエラーログを確認したところ、以下のようなログが出力されていました。
Could not spawn process for application /var/www/example: An error occurred while starting up the preloader.
Error ID: c365a194
Error details saved to: /tmp/passenger-error-ETd7bx.html
Message from application: You must use Bundler 2 or greater with this lockfile. (Bundler::LockfileError)
ログを読むとbundlerのバージョンを2以上にしろと書いてあるようですが、bundlerのバージョンアップは既に完了しています。
原因は何ぞやと調べていると、割とシンプルな設定ミスをしてました(というか設定するのを忘れてた)。
原因、解決
シンプルにRubyのバージョンを上げてから、Passengerのgemを入れるの忘れてました。おバカ。
なので、まずは更新したRubyのバージョンに対応するPassengerのgemをインストールします。その後、コマンドを入力してApacheのモジュールもインストールすることを忘れずに。
$ gem install passenger
$ passenger-install-apache2-module
モジュールのインストール後、LoadModule passenger_moduleの記述例が表示されると思うので、Apacheの設定ファイルにコピペします。(今更ですが今回はrbenvを使ってRubyを2.5.7にアップグレードしています)
LoadModule passenger_module /usr/local/rbenv/versions/2.5.7/lib/ruby/gems/2.5.0/gems/passenger-6.0.6/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/rbenv/versions/2.5.7/lib/ruby/gems/2.5.0/gems/passenger-6.0.6
PassengerDefaultRuby /usr/local/rbenv/versions/2.5.7/bin/ruby
</IfModule>
この時、バーチャルホストの設定でPassengerRubyにもRubyのバージョンを記述しておくのを忘れないようにしましょう。
PassengerRuby /usr/local/rbenv/versions/2.5.7/bin/ruby
これで設定は終わりです。Apacheを再起動して正常にサイトに繋がるか確認しましょう!
余談
そもそもの設定ミスの原因としては、実はこのサーバー上では同じApache + Passengerの構成で複数のRailsアプリケーションが動いており、それぞれのアプリケーションで利用するモジュールの設定が混在していたため、勘違いや混乱の元になったという背景があります。
基本的なことではありますがこういう混乱を招かないように、ちゃんとサイト別に設定ファイルを分けて、分かりやすいファイル名にしておきましょうね。
この記事が気に入ったらサポートをしてみませんか?