1

にある ruby​​ on rails アプリケーションがあります/home/user/application。DocumentRoot が である Apache Web サーバーがあり/var/wwwます。そして、シンボリックリンクがあり/var/www/application -> /home/user/applicationます。

Ruby on Rails に関する私の Apache 構成セクションは次のとおりです。

    RailsBaseURI /application
    <Directory /home/user/application>
            Order Allow,Deny
            Allow from all
            Options -MultiViews
    </Directory>

Passenger コードを変更して、生成の最初の段階で option を (ファイルに) 出力するようにしましたapp_root。問題があればphusion_passenger/spawn_manager.rb、メソッド内のファイルを変更しましたhandle_spawn_application

私が得る値は/home/user、これは間違っています、必要でし/home/user/applicationた。私の質問は、Passenger はoption['app_root']( RAILS_ROOT|になるRails.Root) をどのように計算するのでしょうか?

観察: Passenger コードをハードコーディングapp_rootするように変更したところ/home/user/application、すべて正常に動作しました。

4

1 に答える 1

1

/var/www/application が /home/user/application/public を指すようにシンボリック リンクを変更します。

次に、RailsBaseURI を RackBaseURI に変更し、spawn_manager.rb への変更を元に戻します。


前の説明では、単一のアプリケーションを想定していました。

    <Directory /var/www/application/public>
            Order Allow,Deny
            Allow from all
            Options -MultiViews
    </Directory>

Apache Phusion のドキュメントを参照してください。 DocumentRoot を追加し、ディレクトリ構成に /public を追加して、spawn_manager.rb への変更を元に戻す必要があります。

お気づきのように、app_root は指定されたディレクトリから 1 つ上のディレクトリです。/home/user/application/public の親ディレクトリは、Rails ルートである /home/user/application です。

Rails > 3 の RailsBaseURI の代わりに RackBaseURI が必要です

この背後にある理由は、Apache が (パブリック ディレクトリにある) 静的アセットを提供し、それが存在しない場合、Passenger がリクエストを Rails アプリにルーティングするためです。

于 2013-04-19T18:56:09.107 に答える