web-dev-qa-db-ja.com

Rails Apache2の乗客の問題

Apache2とmod_Rails(Phusion Passenger)を使用してubuntu10.10のRuby on Rails serverをセットアップしようとしています。

私はすでにRuby 1.9.2-p0とRails 3.0.8をインストールし、passenger-install-Apache2-moduleとpassenger gem(v3 .0.7)。

次に、Apache構成ファイルに3行を追加するように指示されます。そこで、これらの行を '/etc/Apache2/Apache2.conf'に追加しました。

LoadModule passenger_module /usr/local/lib/Ruby/gems/1.9.1/gems/passenger-3.0.7/ext/Apache2/mod_passenger.so
PassengerRoot /usr/local/lib/gems/1.9.1/gems/passenger-3.0.7
PassengerRuby /usr/local/bin/Ruby

そして、「/ etc/Apache2/httpd.conf」を編集して追加しました。

NameVirtualHost *:80

<VirtualHost *:80>
ServerName 192.168.0.2
DocumentRoot /var/www/webop/public

<Directory /var/www/webop/public>
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>

また、/ usr/local/lib/Ruby/gems/1.9.1/gems/passenger-3.0.7/ext/Apache2 /にあるファイルmod_passenger.soが実際には存在しないこともわかりました。その名前はmod_passenger.cです。しかし、それからエラーは発生しません。

サーバーには、LAN経由でのみアクセスできる必要があります。サーバーにアクセスすると、アプリのパブリックフォルダーにあるすべてのファイルとディレクトリが表示されますが、アプリ自体は起動しません。

Apacheを再起動すると、mod_Railsがすでにロードされていると表示されるので、passengerが実行されていると思いますが、アプリが起動しない理由がわかりません。

前もって感謝します!

20

私はついに問題が何であるかを理解しました:私は自分のRubyインストールを台無しにしました。

/ usr/local /にはRuby1.9.2-p0(使用したいバージョン)がインストールされていましたが、/ usr /にはRuby1.8.7がインストールされていました。

乗客はどのRubyバージョンを使用するか混乱していたので、Apache2/mods-enabled/passenger.loadおよび.config内のLoadModule、PassengerRoot、およびPassengerRubyパスを正しいパスに変更し、最終的に機能しました!両方ファイルが自動的に作成されたため、再定義の問題も発生しました。Apacheの起動時に、「mod_passengerはすでにロードされています」という警告が表示されたため、

LoadModule passenger_module /usr/local/lib/Ruby/gems/1.9.1/gems/passenger-3.0.7/ext/Apache2/mod_passenger.so
PassengerRoot /usr/local/lib/gems/1.9.1/gems/passenger-3.0.7
PassengerRuby /usr/local/bin/Ruby

apache configから、警告が消えました!

おそらくこれはいつか他の誰かを助けるでしょう!

12

Mod_passenger.soが存在しない理由は、Apacheモジュールをインストールしていないためです。実行:

passenger-install-Apache2-module

これにより、gemディレクトリ内にmod_passenger.soファイルが作成され、Apache2.confファイルにコピーするための3行が提供されます。

パッセンジャーモジュールは現在のgemsetにインストールされているため、プロジェクト間で競合が発生することはありません。 RVMを介して、場合によってはRBENVを介して、互換性のあるバージョンのRubyと任意のgemsetを使用できます。これにより、あるバージョンのRubyから次のバージョンへの簡単なアップグレードパスが作成されます。

38
superluminary

私は今日、よりクリーンな解決策に出くわしました。これは将来のユーザーに役立つかもしれません。コマンド -

passenger-install-Apache2-module

これらの3行をApache構成ファイルに入れるように指示します。

LoadModule passenger_module /home/anwar/.rvm/gems/Ruby-2.2.0/gems/passenger-4.0.59/buildout/Apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/anwar/.rvm/gems/Ruby-2.2.0/gems/passenger-4.0.59
     PassengerDefaultRuby /home/anwar/.rvm/gems/Ruby-2.2.0/wrappers/Ruby
   </IfModule>

しかし、その構成ファイルはどこにありますか?答えは構成ファイルは多くの部分に分かれていますそしてそれらは/etc/Apache2/mods-availableにあります。

したがって、3つのことを行う必要があります-

  1. .loadフォルダに/etc/Apache2/mods-availableで終わるファイルを作成します。 passenger.loadを使用しました。

  2. そのファイルに3行を貼り付けて、ファイルを保存します。

  3. ターミナルでSudo a2enmod <module-conf-filename>を使用してモジュールを有効にします。私の場合、ファイルはpassenger.loadでした。だから、私は使用しました

    Sudo a2enmod passenger
    

ここで、サーバーを再起動し、コマンドApache2ctl -Mを使用して、passengerモジュールが有効になっていることを確認します。

3
Anwar

これらの3行は、Apache2.confではなくhttpd.confファイルに入れてほしいと思います。少なくともそれは私がいつもやってきた方法です。

1
dpb