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
に記載しました。
どこが間違っているのかご指摘いただければ幸いです。
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アプリを公開する
的外れだったら申し訳ないのですが、Apacheの設定で、
RailsBaseURI /hello
が足りていない気がします。
あと、ひょっとしたら、DocumentRoot直下の"hello"というディレクトリ(SymlinkでもOK)の存在が必要で、
それがRAILS_ROOTのpublicディレクトリであることが必要かもしれません。
今の設定ファイルのままいくのであれば、
ln -s /tmp/hello/public /tmp/hello/public/hello
という感じでしょうか。(少し強引なやり方なので、うまくいくか心配ですが)
試してみてください。
ご回答ありがとうございます!!
御答えが仮に正解だとすると、コントローラを作るごとに設定が必要となりそうですね(^^;;
またご報告します。取り急ぎ御礼まで。
>3000番ポートは開けていない
そのための設定例が回答1のリンク先
80番をサーバ内部で3000番に振り替えている
apache側の設定なのでWebrickだろうとpassangerだろうと同じ
同様の方法でバーチャルホストのほうに設定するならこちらの方の日記がわかりやすい
フォローありがとうございます!!
>そのための設定例が回答1のリンク先
>80番をサーバ内部で3000番に振り替えている
なるほど。開けなくても良いのですね。
Apacheの設定ファイルに原因がありそうですね。
トライしてまたご報告します。取り急ぎ御礼まで。
ありがとうございますm(_ _)m
すみません、/helloサブディレクトリで、稼動させる方法と勘違いして、回答してしまいました。
では、
RailsBaseURI /
を設定されてみてはいかがでしょうか。
あとは、問題の切り分けとして、".html"という文字列を
erbファイルの文字列から外す(コントローラ等も修正)とどうなるでしょうか?
ひょっとしたら、拡張子に対して、Apacheがおせっかいしているのかな、とも思いまして。
アドバイスありがとうございます。
結局、私の手順に特に誤りがあるわけではないようですね。
困りました...
細かい点ですが、「/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. 所有者やパーミッションは、どうなっていますか?
御回答ありがとうございます!!
すみません!
おっしゃるとおり /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)
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 作成の両方を行います。)
フォローありがとうございます!!
> (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
ありがとうございます!
> hello.XXX.com:3000/hello/index.html で動作を再確認
3000番ポートは開けていないので...
Passangerが簡単で速いという評判なので期待しているのですが、
ダメなら教えていただいた方法も検討してみます。
ありがとうございます。