FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[CakePHP]Configure::write('debug', 0) を設定した場合に "The requested address '/' was not found on this server" となってしまう件

とりあえず開発中の CakePHP プロジェクトで、デバッグモードを製品リリース時のモードに変更してみたところ、うんざりするほどハマってしまい、かなりの時間を無駄に費やしてしまったため、メモしておく。

ちなみに、CakePHPのバージョンは1.3.9 。
で、CakePHP 全体を、apache のデフォルトドキュメントルート以下のサブフォルダに配置している。
例えばこのようにしている。

/var/www/html/myproject


http://localhost/myproject/ にアクセスすると、サイトのトップページが表示される。
といっても、CakePHP のデフォルトページである home.ctp をコピーしたものが表示されるだけなのだが。
後で、このコピーをいじって、自分のプロジェクト用に変更しようと思っていたのだ。



CakePHP の app/config/core.php で以下のようにデバッグモードをゼロ(productionレベル)にすると、トップページにアクセスした時に
"The requested address '/' was not found on this server"
というエラーになってしまう。

Configure::write('debug', 0);




検索して調べた限りでは、原因として以下のようなことが考えられると書かれていたが、
私のケースでは全て当てはまらなかった。

(1) app/tmp フォルダに書き込み権限がない。
(2) apache の mod_rewrite設定が正しく機能していない。
(3) app/tmp/cache フォルダ内にキャッシュが残っていて、それが悪影響を及ぼしている。
  キャッシュを全て消すと直る。
(4) app/config/database.php 内のデータベース設定が正しくない。
  又は、そこで指定しているデータベースを作成し忘れていたり、名前が間違っている。


やむを得ず、デバッガでうまくブレークポイントが効かないなどの別のトラブルにゲッソリしつつ、ソースコードを追いかけて行ったところ、とうとう以下の個所が原因であることを突き止めた。

***** home.ctp *****

if (Configure::read() == 0):
$this->cakeError('error404');
endif;


CakePHP のデフォルトトップページの先頭に、上記のような個所がある。
デバッグモードがゼロの場合は、何とわざわざ、404 not found エラーになるようにしてあったのだ!!

くっそー。
なんという余計なことを...

というか、このファイルの中にせっかく、To change the content of this page, create: APP/views/pages/home.ctp. なんて書いてあるんだから、どうせなら、
「Configure::write('debug', 0); する場合は、独自のページを作って、$this->cakeError('error404'); の個所は削除せよ」
とでも書いておいてほしいぞ。

これは贅沢な注文なんだろうかなぁ。
スポンサーサイト
コメント

承認待ちコメント

このコメントは管理者の承認待ちです
コメントの投稿
管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。