Passengerを入れてみる[解決編]

どうも腑に落ちないのでPassengerをひつこく調べてみると、この前のはやはり間違いであることがわかった。

結局動作確認できたのは、以下の組み合わせ

  • Ruby1.8.6 P114
  • Rails1.2.6
  • Rails2.0.2
  • Apache2.0.63

1.2系も2.0系も動作できた(同時も可)。いかに注意点をいくつか書いておく

権限設定

Passengerはconfig/enviromment.rbの所有ユーザの権限で動作する。これがrootになっている場合、nobodyで動作するように自動的に切り替えられる仕様になっている。このため前回は、ここをrootで作っていた為に、logsとtmpフォルダへのアクセス権限が無くなっていて正常起動することができなかった。

この権限を設定しておけば、1.2系でも2.0系でも動作する。

権限の設定方法としてはenvironment.rbファイルの所有権限を変えるかlogs,tmpフォルダへのnobodyユーザでの権限を与えるかのどちらかを行うといい。

Alias設定

Aliasを書く設定がいくつかのサイトであったが、それはどれもうまくいかなかった。cgi起動はできるがPassengerでの起動はうまくいかなかったので、今のところ使わない方がベターな感じ。

Apache.confの設定

Virtualホストを作成しないで展開する場合、シンボリックリンクを張るのが確実と感じた。以下に今回テストしてみたケースを書いてみる。

プログラム

 /opt/rails/tgg12 #1.2系で作ったプロジェクトファイル

シンボリックリンク

 #cd /usr/local/apache2/htdocs
 #ln -s /opt/rails/tgg12/public tgg12
 /usr/local/apache2/htdocs/tgg12 #=>tgg12 -> /opt/rails/tgg12/public

まずこの状態で、.htaccessもhttp.confもいじらない状態でcgiモードで動作することを確認する。

つぎに、passengerにこのフォルダがrailsであることを教えてやる。http.confに以下の記述を追記

RailsBaseURI /tgg12

これでApacheを起動しなおしてみると、Passengerで起動している。

念のためフォルダ名称が変わってもいいのか、いくつかのパターンで試してみた。意図としては以下のパターンをテストしている。

  • 実際のフォルダ名と異なるフォルダ名で動作するか
  • トップディレクトリ以外のフォルダでも動作するか
  • Rails1.2/Rails2.0が同時に動作するか
 /opt/rails/tgg12 #1.2系で作ったプロジェクトファイル
 /opt/rails/tgg12-2 #1.2系で作ったプロジェクトファイル(tgg12を単純コピー)
 /opt/rails/tgg20 #2.0系で作ったプロジェクトファイル

以下のようにシンボリックリンクを切った

 /usr/local/apache2/htdocs/tgg13 #=> /opt/rails/tgg12-2/public
 /usr/local/apache2/htdocs/tgg20 #=> /opt/rails/tgg20/public
 /usr/local/apache2/htdocs/sample/wgg #=> /opt/rails/tgg12/public

http.confに書いた設定は以下の通り。

RailsBaseURI /tgg13
RailsBaseURI /tgg20
RailsBaseURI /sample/wgg

これですべてのパターンで動作することを確認できた。これで安心してPassengerを使える。