Rails + Passanger が動きません。原因わかりますでしょうか?


Ubuntu 8.04
ruby 1.8.6
rails 2.3.5
gem 1.3.6
passanger (2.2.11)
Apache 2.2.8


WEBrick を起動し、
http://localhost:3000/hello/index.html
へアクセスすると成功するのですが、


Apache の
http://hello.XXX.com/hello/index.html
は 404 Not Found になってしまいます。


エラーログ
[error] File does not exist: /tmp/hello/hello


http://hello.XXX.com/
は正しく Welcome aboard が表示されます。


操作した手順を
http://d.hatena.ne.jp/nannde/20100506/1273159310
に記載しました。


どこが間違っているのかご指摘いただければ幸いです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/05/14 00:45:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:Committeeman No.1

回答回数153ベストアンサー獲得回数19

ポイント19pt

localhost:3000/hello/index.html はポート3000を直接指定しているから動く

hello.XXX.com/hello/index.html はポート番号の指定がないためデフォルトの80へ行ってしまう


hello.XXX.com:3000/hello/index.html で動作を再確認


3000を指定せずとも動くようにする例はつぎのページを参照

[Ruby] ApacheとWebrickを連携してrailsアプリを公開する

http://maskana.homedns.org/pg/memos/237

id:nannde

ありがとうございます!

> hello.XXX.com:3000/hello/index.html で動作を再確認

3000番ポートは開けていないので...

Passangerが簡単で速いという評判なので期待しているのですが、

ダメなら教えていただいた方法も検討してみます。

ありがとうございます。

2010/05/07 02:03:46
id:rx7 No.2

回答回数38ベストアンサー獲得回数9

ポイント18pt

的外れだったら申し訳ないのですが、Apacheの設定で、


RailsBaseURI /hello


が足りていない気がします。


あと、ひょっとしたら、DocumentRoot直下の"hello"というディレクトリ(SymlinkでもOK)の存在が必要で、

それがRAILS_ROOTのpublicディレクトリであることが必要かもしれません。

今の設定ファイルのままいくのであれば、


ln -s /tmp/hello/public /tmp/hello/public/hello


という感じでしょうか。(少し強引なやり方なので、うまくいくか心配ですが)

試してみてください。

id:nannde

ご回答ありがとうございます!!

御答えが仮に正解だとすると、コントローラを作るごとに設定が必要となりそうですね(^^;;

またご報告します。取り急ぎ御礼まで。

2010/05/07 09:35:33
id:Committeeman No.3

回答回数153ベストアンサー獲得回数19

ポイント19pt

>3000番ポートは開けていない


そのための設定例が回答1のリンク先

80番をサーバ内部で3000番に振り替えている

apache側の設定なのでWebrickだろうとpassangerだろうと同じ


同様の方法でバーチャルホストのほうに設定するならこちらの方の日記がわかりやすい

http://d.hatena.ne.jp/hiratake55/20090704

id:nannde

フォローありがとうございます!!

>そのための設定例が回答1のリンク先

>80番をサーバ内部で3000番に振り替えている

なるほど。開けなくても良いのですね。

Apacheの設定ファイルに原因がありそうですね。

トライしてまたご報告します。取り急ぎ御礼まで。

ありがとうございますm(_ _)m

2010/05/07 09:45:17
id:rx7 No.4

回答回数38ベストアンサー獲得回数9

ポイント18pt

すみません、/helloサブディレクトリで、稼動させる方法と勘違いして、回答してしまいました。


では、

RailsBaseURI /

を設定されてみてはいかがでしょうか。


あとは、問題の切り分けとして、".html"という文字列を

erbファイルの文字列から外す(コントローラ等も修正)とどうなるでしょうか?

ひょっとしたら、拡張子に対して、Apacheがおせっかいしているのかな、とも思いまして。

id:nannde

アドバイスありがとうございます。

結局、私の手順に特に誤りがあるわけではないようですね。

困りました...

2010/05/07 18:46:58
id:studiocherry No.5

回答回数283ベストアンサー獲得回数100

ポイント18pt

細かい点ですが、「/var/log/apache2/error-hello.log」のエラーログは、

> [error] File does not exist: /tmp/hello/hello


と書かれていますが、/tmp/hello/public じゃなくて、/tmp/hello/hello って、でていますか?



このエラーメッセージが、正しい(このままlogに記録されている)のであれば、ディレクトリやファイルが、「ない」or「Apache が、アクセスできない」ことが、原因と考えられますので、以下の点について教えてください。

1. httpd.conf の DocumentRoot や Directory に 記載されている path は、正しいでしょうか?

2. このディレクトリ or ファイルは、存在していますか?

3. 所有者やパーミッションは、どうなっていますか?

id:nannde

御回答ありがとうございます!!

すみません!

おっしゃるとおり /tmp/hello/public/hello です。

* error-hello.log

[Sat May 08 00:12:07 2010] [error] [client XXX.XXX.XXX.XXX] File does not exist: /tmp/hello/public/hello, referer: http://hello.XXX.com/


> 1. httpd.conf の DocumentRoot や Directory に 記載されている path は、正しいでしょうか?

はい

>2. このディレクトリ or ファイルは、存在していますか?

はい

httpd.conf(専用ファイルhello)内の DocumentRoot の値をコピーして、

$ ls -al <貼り付け>/

#=> /tmp/hello/public/ 内がリストされます。

Directory に記載のパスも同様に確認しました。


>3. 所有者やパーミッションは、どうなっていますか?

nannde: root です。


http://hello.XXX.com/ へのアクセスでは /tmp/hello/public/index.html が正しく表示されます。

* access-hello.log

x.x.x.x - - [08/May/2010:00:12:01 +0900] "GET / HTTP/1.1" 200 7466

x.x.x.x - - [08/May/2010:00:12:01 +0900] "GET /javascripts/effects.js HTTP/1.1" 200 38675

x.x.x.x - - [08/May/2010:00:12:01 +0900] "GET /javascripts/prototype.js HTTP/1.1" 200 129738

x.x.x.x - - [08/May/2010:00:12:02 +0900] "GET /images/rails.png HTTP/1.1" 200 6646

x.x.x.x - - [08/May/2010:00:12:07 +0900] "GET /hello/index.html HTTP/1.1" 404 214


public/hello/index.html というファイルは実在しません。

public/.htaccess も存在しません。

これでどうやって controller=>hello, action=>index を解決するのかは全く知りませんが、

それが Passenger のお仕事、と解釈しております。


どこが間違っているのでしょうか(TT)

2010/05/08 01:54:39
id:studiocherry No.6

回答回数283ベストアンサー獲得回数100

ポイント18pt

5番への返信で、

> http://hello.XXX.com/ へのアクセスでは /tmp/hello/public/index.html が正しく表示されます。

と 書かれていて、気がついたのですが、URLは、どちらが、正しいのでしょうか?

(どちらのURLで、動作することを 希望されていますか?)


(1) http://hello.XXX.com/index.html      動作OK (5番の返信より)

(2) http://hello.XXX.com/hello/index.html   404エラー が、発生


はてなダイアリーに記載されていた VirtualHost の設定からすると (1) のURLに思えるのですが、(2)のURLで、動作されることを 期待していますか?


5番の回答は、VIrtualHost の設定内容を見て、(1)で、動かないと いわれていると思い込んで、回答したのですが、今、はてなダイアリーを読み返してみると (1)用の設定を行って、(2)のURLで、動作確認されていたので、どちらかなと 思いました。


もし、(2)のURLで、動くようにするのであれば、DocumentRoot の中に hello ディレクトリが必要で、その hello ディレクトリの中に public ディレクトリの中身が、必要です。

つまり、Passenger は、 /tmp/hello/public/hello/index.html を探しに行きます。

(具体的な設定は、2番の回答の RailsBaseURI 設定と Symlink 作成の両方を行います。)

id:nannde

フォローありがとうございます!!

> (1) http://hello.XXX.com/index.html      動作OK (5番の返信より)

これは public/index.html (静的HTML)を表示しております。

パスが間違っていないことを確認できるに過ぎません。


> (2) http://hello.XXX.com/hello/index.html   404エラー が、発生

public/hello は実在しません。

public/.htaccess も存在しません。

httpd.conf(/etc/apache2/sites-available/hello)内に rewrite ルールもありません。

これをPassengerが controller=>hello, action=>index に解決し、

app/views/hello/index.html.erb を表示してくれる、

と考えているのですが、これは間違っているのでしょうか?


> Passenger は、 /tmp/hello/public/hello/index.html を探しに行きます。

これではApacheと同じ働きのような気が...


http://hello.XXX.com/hello/index.html

で動作することを期待しております。

ただし、コントローラを作るごとにpublic/<CONTROLLER>/<VIEW> を作る必要があるのなら、

もうPassengerはやめておこうと思います。


WEBRrickやMongrelなら

http://hello.XXX.com/hello/index.html

で app/views/hello/index.html.erb を表示してくれています。


私はRails初心者なので勘違いがあるのかもしれません。


稀なケースにお付き合いいただきありがとうございます。m(_ _)m

2010/05/09 11:14:07
  • id:nannde
    Committeemanさんのおっしゃるとおり、
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
    を設定したら

    403 Forbidden
    You don't have permission to access /hello/index.html on this server.
    まで来ました!
    Passengerのメッセージっぽいです!


  • id:nannde
    http://hello.XXX.com/hello/index.html
    でapp/views/hello/index.html.erb を表示できるようになりました。

    ただし、WEBrick起動中なら。

    PassengerがWEBrickやらmongrelやらの代わりになると思っていたのですが、根本的に勘違いしているのでしょうか?
  • id:nannde
    Passenger 外してもアクセスできました。

    つまり、3000番ポートの話はPassengerとは関係ないのではないでしょうか?

    Passengerが働かない理由をご指摘いただける方、いらっしゃいませんでしょうか?

  • id:Committeeman
    Committeeman 2010/05/07 14:37:49
    >3000番ポートの話はPassengerとは関係ないのではないでしょうか?
    3000番ポートの話は質問文に対して最初に行うべき確認部分
    (apacheを通じてrails関連を利用するまでの手順)

    >ただし、WEBrick起動中なら。
    rails関連の利用は出来るようになっているということなので次にみるべきはPassenger
    回答3のリンク先(「6. Web サーバを Passenger (通称: mod_rails) に変更」の項)を参考に見直しをかける必要あり
  • id:nannde
    コメントありがとうございます。

    >回答3のリンク先(「6. Web サーバを Passenger (通称: mod_rails) に変更」の項)を参考に見直しをかける必要あり

    参考にして色々見直しかけてるのですが、成功していないという状況なのです(^^;;

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません