トップページ⇒php
1001コメント303KB

【PHP】フレームワーク CakePHP 10ホール目【v1.3】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/11/01(月) 21:43:26ID:???
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0381nobodyさん2010/12/14(火) 17:26:06ID:???
ここ1年くらいで始めた人は大変だろうねえ。
0382nobodyさん2010/12/14(火) 20:03:45ID:???
ここ1年内に始めたけど、>>378の言うとおりだったな
なんとかcookbookを見たり、お前らに罵倒されながら覚えたけどw
0383nobodyさん2010/12/14(火) 20:48:56ID:???
Cookbookあてにならんからなぁ、割と間違ってるし。
もっと新しい情報増えないもんかね。
Advent Calendarがずっと続けばいいのに。
03843502010/12/14(火) 20:54:08ID:???
いい加減php4に足引っ張られてる気がするな
0385nobodyさん2010/12/14(火) 20:54:49ID:???
名前そのままだった恥ずかしい・・・
0386nobodyさん2010/12/14(火) 21:09:40ID:???
Lithiumに期待だな
0387nobodyさん2010/12/14(火) 21:11:26ID:???
プラグインも考えると、もうphp5状態なのになー
0388nobodyさん2010/12/14(火) 23:19:50ID:???
でも、結構PHP4の使用率高いよ。
フリープログラム掲載してるけど、しょっちゅうPHP4で動かないと言われる
0389nobodyさん2010/12/15(水) 07:10:35ID:???
PHP4ってサポート終わってるよね?
セキュリティホールがあっても修正されないんだよね?
0390nobodyさん2010/12/15(水) 09:27:53ID:???
そうだよ
0391nobodyさん2010/12/15(水) 12:12:12ID:???
vendorsに入れているcronで処理するファイルがあるのですが、
これをコントローラーから呼び出して実行したいと思います。
どう書けばよいのでしょうか?
0392nobodyさん2010/12/15(水) 16:10:21ID:???
今日からcakephpじゃー!と思って
iis7.5
php5.3.4
cakephp1.3.6
をそろえて
http://sites.google.com/site/kikineria/cakephp/dlandinstall
ここ見ながらやったんだけど

Warning: include() [function.include]: open_basedir restriction in effect. File(D:\Program Files\cakephp-cakephp-f6748d4\cake\bootstrap.php) is not within the allowed path(s):
(C:/inetpub/wwwroot) in D:\Program Files\cakephp-cakephp-f6748d4\app\webroot\index.php on line 76

Warning: include(D:\Program Files\cakephp-cakephp-f6748d4\cake\bootstrap.php) [function.include]:
failed to open stream: Operation not permitted in D:\Program Files\cakephp-cakephp-f6748d4\app\webroot\index.php on line 76

Warning: include() [function.include]: Failed opening 'cake\bootstrap.php' for inclusion (include_path='D:\Program Files\cakephp-cakephp-f6748d4;D:\Program Files\cakephp-cakephp-f6748d4\app\;.;C:\php\pear')
in D:\Program Files\cakephp-cakephp-f6748d4\app\webroot\index.php on line 76

Fatal error: CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php.
It should point to the directory containing your \cake core directory and your \vendors root directory. in D:\Program Files\cakephp-cakephp-f6748d4\app\webroot\index.php on line 77

こんなん出てきて死亡。スタートラインにも立てなかったぜ\(^o^)/
0393nobodyさん2010/12/15(水) 16:21:33ID:???
なんでわざわざIISなんだよ。
警告見てググればわかるけど、open_basedirに引っかかってる。

http://www.php.net/manual/ja/ini.core.php#ini.open-basedir

IISでのopen_basedirの解除方法とか知らんけど。
0394nobodyさん2010/12/15(水) 16:27:33ID:???
>>393
やさしー!
もうちょっとがんばっちゃうね!
0395nobodyさん2010/12/15(水) 19:11:37ID:???
>>391
ふつうに子プロセスとして実行すればいいんじゃない?
0396nobodyさん2010/12/15(水) 19:24:35ID:???
>>395
すみません、「子プロセス」の意味がよくわかりません・・・
0397nobodyさん2010/12/15(水) 19:52:30ID:???
>>393
ディレクトリが違うごとに書き換えんのかよー!?やってらんね!
って思ったら、複数指定できんのね!
open_basedirのヒントくれてありがとー\(^o^)/


open_basedir = "C:/inetpub/wwwroot;C:/Windows/Temp;D:/Program Files/cakephp-cakephp-f6748d4"
ってしたら、いつもの黄色と緑の画面出てきたー!
やったぜい
0398nobodyさん2010/12/15(水) 21:01:24ID:???
>>396
ググって解決してるだろうけどいちおー。
http://www.php.net/manual/ja/book.exec.php
0399nobodyさん2010/12/15(水) 21:14:07ID:???
>>398
execの事ですか。それをコントローラ内で実行するんですね。
試してみます。ありがとうございました。
0400nobodyさん2010/12/15(水) 23:21:27ID:???
Cakeはずっと使ってきているが、衝動的に嫌気がさして、
ちょうどLithiumが0.9.9 とかwktk感が出てきたっぽいので、
Lithium / PHP5.3 / MongoDB に挑戦してみたが
(公式)ドキュメントなさ過ぎワロタ状態 & 環境構築だけで一苦労だったでござる
(おまけにPHP5.3系では既存のCakeのコードもうpグレードしないとだし)
やっと見つけたLithium日本語フォーラムも閑古鳥だし
無名関数を使ったフィルタチェインとか面白そうなんだがなー
APIの大変更とか起こりそうな感じではあるので、まだCakeだな
0401nobodyさん2010/12/15(水) 23:23:30ID:???
(追記)だがMongoDBは面白そうだ
Cake + MongoDB で実運用してる人いるのかな
0402nobodyさん2010/12/16(木) 00:08:09ID:???
1.3と1.2 初学者におすすめなのは?
0403nobodyさん2010/12/16(木) 00:24:36ID:???
RDBMS + ORMはとてもキモくて使う気になれなかったが、
MongoDBとやら + CakePHPは面白そうだな。
0404nobodyさん2010/12/16(木) 00:27:46ID:???
ちなみにCakePHPってDBはRDBを想定しているのではないの?
KVSに対応できるもの?
0405nobodyさん2010/12/16(木) 02:09:13ID:???
DataSourceを拡張したものでmemcachedとかTokyo Tyrantとか用のが
公開されてるね(試してない)。JOINがないなら、わざわざActiveRecord通すことも
ないとは思うけど・・・。セッションの保存用としての利用にはMemcachedは
デフォで使えるみたいだね(やっぱり試してない)
>>402
どうせバージョン乗り換え時に相応の学習コストがかかるし、どっちもStableなんだから1.3
>>403
ORM ってRDBの取り回しのために使うもんだと思ってた
0406nobodyさん2010/12/16(木) 03:13:07ID:???
CakePHPとMongoDBでやろうとしたけど、色々ハマってやめた。
CakeはRDBを前提としすぎてると思った。
俺の思った一番のネックはHelper->setEntity()だな。
0407nobodyさん2010/12/16(木) 04:26:14ID:???
>>406
レスどうもです。ちょっとわからなかったので自分なりに考えてみた。
・MongoDBはスキーマレス
・CakeのMongoDBデータソースを使う場合、モデル内にスキーマらしきものを記述する(らしい)
・Cake本体が"Describe"とか発行してテーブル(コレクション)の構造を把握することが出来ないので、
 Helper側でModelName.FieldNameを自動設定する時にはまり所が出来る
・フィールドの中にさらにArrayが入ってたりするともう大変
こういう理解でいいのかな・・・cakephp-mongodbのサンプル見る限りはなんとかなりそうな気がしたが、
いろいろでてくるのか〜。
気力と実力と時間が出来ない限りは、CakePHP + MySQL をおとなしく使い続けるしかないのかな・・
そのへんLithiumはイケてるのかと思うと迷う。
0408nobodyさん2010/12/16(木) 10:13:17ID:???
>>407
FormHelperで配列をPOSTするようなのが、
type=select multiple=trueじゃないと作れないからね。
同じモデルへの送信を複数に出来るから、
[{'name':'foo'},{'name':'bar'},{'name':'buz'}]見たいなのは出来ても、
['foo','bar','baz']みたいなのは出来なかったよ。

でもcakephp-mongodbのコミッタも増えてるし、
そのうち使えるようになるんじゃないのかな。
0409nobodyさん2010/12/16(木) 12:33:59ID:???
コンポーネントを動的にロードする方法ありませんか
今作ってるあるコントローラが、コンポーネント50個ぐらい使ってて、var componentsが長すぎる
デカいアプリ作るのに向かないのかなCakeって
0410nobodyさん2010/12/16(木) 12:44:37ID:???
>>409
ttp://book.cakephp.org/ja/view/933/The-App-Class

Cookbookくらいぜんぶ読んどいて損ないから。
というか、もしチーム開発してたら迷惑だから。
0411nobodyさん2010/12/17(金) 06:04:07ID:???
質問者じゃないけど、ちょっとやってみたけど、
App::import('Component', 'Foo');
しても、initialize()やstartup()を上手い事呼んでくれる訳じゃないのね。

public function index(){
$Foo = App::import('Component', 'Foo');
$Foo->initialize($this);
$Foo->startup($this);
}

こう書けばいいのかとも思ったけど、
beforeRender()やshutdown()も呼ばれないし、これ使えないんじゃないかな?
なんか勘違いしてるんだろうか。

http://book.cakephp.org/ja/view/933/The-App-Class#コンポーネントの読み込み-939
うわ、ChromeがURLコピーした時URLエンコードしてくれなくなってる・・・
0412nobodyさん2010/12/17(金) 06:24:46ID:???
そりゃ当然コールバックは呼ばれないよ
0413nobodyさん2010/12/17(金) 09:34:54ID:???
App::import('Component', 'Foo');
$foo = new Foo();
こうするべきじゃないの?
0414nobodyさん2010/12/17(金) 15:52:56ID:???
App::import('Component', 'Foo');
$foo = new Foo();
$foo->initialize($this);
$foo->startup($this);

こんな感じかね
自前でこういう関数作っとけばいいんじゃね
0415nobodyさん2010/12/17(金) 15:57:52ID:???
もはやパスの解決以外の意味で"require_once"を使わない意味が分からんw
0416nobodyさん2010/12/17(金) 16:10:52ID:???
>>414
ベターだろうけど色々ふぐあいの原因になる。
そもそも設計し直したほうがいい。確実に
0417nobodyさん2010/12/17(金) 17:05:13ID:???
どっちにせよコールバックが動かないならなんの意味も無い気がする
0418nobodyさん2010/12/17(金) 17:10:48ID:???
$html->linkは重いと評判なのでpathで書こうと思います。

しかし、この場合、ローカルとサーバ上で画像のリンクをいちいち
書き換えないといけないのはしょうがないのでしょうか?
0419nobodyさん2010/12/17(金) 17:22:51ID:???
>>416
なんで?
Cakeも中で同じような処理やってんじゃないの?

設計し直しても作らなければならない機能は減らない
0420nobodyさん2010/12/17(金) 17:31:16ID:???
コンポーネント50個ってなんでもかんでもコンポーネントにしてるだけだろ
0421nobodyさん2010/12/17(金) 17:58:28ID:???
411だが、変数名は試した時は$FooComponentだったんだ。
貼る時長いなと思って削っちゃった。
で、結局コールバックが呼ばれないなら、
コンポーネントよりもlibsに置いて素のクラスとして呼んだほうがいい気がする。
コールバックが呼ばれるからこそのコンポーネントだと思うし。

>>409 は50個あるコンポーネント、全部AppControllerで設定してるの?
そんだけコンポーネントあれば、部分的に使うやつもあるんじゃないの?

あと10日ほど前に同じ話題出てたよ。
>>331-333
0422nobodyさん2010/12/19(日) 09:44:23ID:???
modelのdeleteAllのコンディションで、
dateフィールドの日付が一週間以上前のデータを全て消すということはできるでしょうか?

例えば、

bookテーブル (id, name, date)
ここのdateが 2010-11-30 とか 2010-12-10 とかバラバラになり、一週間以上前の
データを全て消したいです。

マニュアルを読んでいると、特定の日付を指定して消すことはできるみたいなのですが、
こういう複雑なことはMySQLで直接書くしかないでしょうか?
04234222010/12/19(日) 10:26:17ID:???
ネットを参考に試してみたコードはこんな感じです。
でも動かなかった。。

$aWeekBefore = strtotime('-1 week');
$my_datetime = date("Y-m-d",$aWeekBefore);

$conditions = array('created' => '< ' . $my_datetime);
$this->deleteAll($conditions);
04244222010/12/19(日) 10:36:04ID:???
お騒がせしました。以下のコードで出来ました。

$aWeekBefore = strtotime('-1 week');
$aWeekBefore = date("Y-m-d",$aWeekBefore);

$conditions = array("created < '$aWeekBefore'");
$this->deleteAll($conditions);
0425nobodyさん2010/12/19(日) 10:51:22ID:???
$conditions = array('created <' => $aWeekBefore);
じゃなかったっけ
04264222010/12/19(日) 16:05:07ID:???
>>425

むむ、一応動いたんですけど、そっちのほうが正しいやり方なんですかね。
マニュアルが見つからないもので。。

0427nobodyさん2010/12/19(日) 16:22:35ID:???
http://book.cakephp.org/ja/view/74/Complex-Find-Conditions
「見つからない」って、Cookbookぐらい一通り読んでおけよマジで
04284222010/12/19(日) 16:55:25ID:???
すいません、すいません。deleteの項目しか見てませんでした。

そして、ありがとうございます。
0429nobodyさん2010/12/19(日) 16:59:53ID:???
Cookbookは正直分かりにくい。
0430nobodyさん2010/12/19(日) 18:41:35ID:???
bookって言うぐらいだから全部通して読んでおくしかないと思うよ
セクションごとに「全てを1ページで読む」で
0431nobodyさん2010/12/19(日) 21:05:11ID:???
てか、リンク先がおかしい
0432nobodyさん2010/12/19(日) 21:22:23ID:???
わかりにくいと言うより、情報が足りないよね
細かいことが全然わからない
0433nobodyさん2010/12/19(日) 21:31:53ID:???
cookbook全部読んで情報足りないとおもうなら、
http://api.cakephp.org/classes
これでそれぞれの挙動確認したらいいよ。
あと、もっと深くAPIしるには
coreの中に入ってるtestCase読むのがマジオススメ
こんな昨日あるんだって発見が多い
0434nobodyさん2010/12/19(日) 23:36:16ID:???
>>433
testCaseは読んでなかったな。
APIリファレンスは必読っていうか、
最近じゃ疑問が出たらCookbookは読まずにAPIリファレンスに直行だ。
0435nobodyさん2010/12/19(日) 23:36:44ID:???
結局、Cakeにしろ手のフレームワークにしろ
Webアプリを作る奴らの絶対数って減ってるのかな
0436nobodyさん2010/12/20(月) 01:44:45ID:???
>>431
英語版読んだ方がいいよ。
まあ日本語リソースが充実してるのがcakeの利点の一つでもあるから残念な点だけどね。
0437nobodyさん2010/12/20(月) 07:27:46ID:???
>>435
Cakeにしろ手のフレ このあたりの意味がよく分からないけど、
webアプリを作る人数は増えてるんじゃないか?
なんとなくだけど。
何で減ってるっておもうん?
0438nobodyさん2010/12/20(月) 07:54:47ID:???
「オレオレFWを作る人間の数が減っている」と言いたいのだろうと等質の発言をエスパーしてみる
0439nobodyさん2010/12/20(月) 09:57:33ID:???
Zendしか使ったことないけどCakeどう?
使いやすい?
0440nobodyさん2010/12/20(月) 10:13:24ID:DEKQpeb3
cookbookをローカルにDLできるよ。

http://book.cakephp.org/ja/complete/3/The-Manual
0441nobodyさん2010/12/20(月) 10:23:13ID:???
>>439
オレオレ → Ethnaをちょっとだけ使ってがっかり → オレオレ → CakePHP
な俺としては、CakePHPは嫌いです。
2回目のオレオレのとき、php4切りしたから、php4を引きずってるしね。
Cookbookも情報不足だし間違いもあるし、引数が連想配列なのに、
使われるキーがCookbookにもAPIリファレンスにも書いて無いから、
結局ソースを見ることになる。
慣れて覚えるまでは結構イライラするよ。
でも、人口は多いから、ユーザーベースの情報量は多いし、
やっぱりオレオレフレームワークを作るコストや、そこで間違えるリスクを考えると、全然あり。
でもZendとか、他のフレームワーク使ってるなら、あえて乗り換える程良いとこ無い気がする。
0442nobodyさん2010/12/20(月) 11:37:33ID:???
すまん。確かに統質っぽい書き方だw

Cakeの情報が少ない・古くなったと言うレスを見て
「Cakeやこの手のフレームワークを使う人数も少なくなったのかな?」
ってのが言いたかった。
0443nobodyさん2010/12/20(月) 11:54:19ID:???
つっても実際1.3になってからの情報はすくないし
0444nobodyさん2010/12/20(月) 12:38:34ID:???
ModelのafterFind()の第2引数の$primaryって、
どういう場合にtrueになって、どういう場合はfalseなんだろ?
APIリファレンス見ても、いまいち意図がわからない。

http://api13.cakephp.org/class/model#method-ModelafterFind
Whether this model is being queried directly (vs. being queried as an association)
0445nobodyさん2010/12/20(月) 15:44:35ID:???
上にも書いてたけど、情報多いといっても古いものばかり。
新しい情報ほど少ないってことは実は使ってる人減ってたりして?
0446nobodyさん2010/12/20(月) 16:18:34ID:???
無いわけじゃないんだけどね。
ただ、検索結果には古いエントリばっかりって感じだと思う。
俺も、単にこれどうやっていいかわかんねぇってのから、
一応Tipsみたいなのまで、ちょいちょい書いてるけど、
CakePHPで検索されてくるのはかなり少ないよ。
0447nobodyさん2010/12/20(月) 16:41:04ID:???
プログラムの重いところを探すのは、みなさんどうやっていますか?

自分はこんな感じで、もっといい方法あるんじゃないかなあと妄想しています。

$time_start = microtime(true);

for( $i=0; $i<1000; $i++ ){
$str .="$i回";
}

$time_end = microtime(true);
$time = $time_end - $time_start;

echo "$time秒掛かりました。";
0448nobodyさん2010/12/20(月) 16:50:04ID:???
スレチ
0449nobodyさん2010/12/20(月) 17:01:09ID:???
まぁ業界的にはxDebugを使ったプロファイリングだろうな。
俺はそんな要件が厳しくないので、めんどくさくてめったに使わないから、
あんま説明はしてやれんが。
xdebugがphp拡張モジュールだから結構準備が面倒だけど、興味があるなら下記でググってくれ。

xdebug プロファイリング

スレに合わせるためにじゃないが、たまたまさっき見かけたのはこれ。
http://blog.restartr.com/2010/10/10/the-xhprofpanel-debugkit-custom-panel-cakephp/

XHProfの出力をDebugKitで見せてくれる、DebugKitのカスタマイズみたいだ。
俺は使ったことは無いから、別にオススメしてるわけじゃないぞ。
XHProfもphp拡張モジュールだから、導入が面倒なのは同じかね。
0450nobodyさん2010/12/20(月) 17:12:56ID:???
コード数行〜数十行単位であたりがつくんだったらそれでもいいと思われ
どのクラスの呼び出しで時間食ってるのか、とかの視点でみたいんだったらプロファイラ
0451nobodyさん2010/12/20(月) 17:14:59ID:???
450です。
ごめんかぶった
0452nobodyさん2010/12/20(月) 18:06:14ID:???
>>449 >>450

どうもありがとうございます。

cakePHP独自のやり方があるのかなとも思ったのですが、
特にそんなことはないのですね。
0453nobodyさん2010/12/21(火) 00:26:27ID:???
お前らさぁ
いつまでORMとかキモいことやってんだよ。
0454nobodyさん2010/12/21(火) 00:47:24ID:???
そこにデータがある限り
0455nobodyさん2010/12/21(火) 02:43:02ID:???
OOPとRDBを採用するのをやめるまで
0456nobodyさん2010/12/21(火) 15:24:33ID:???
actionを自動で作るって無理ですよね?

やりたいことはビューのテンプレート(アクション)をプログラムで作成して
それにアクセスしたいんです。Pagesを使うとURLが変わるし・・。
0457nobodyさん2010/12/21(火) 15:30:28ID:???
本気で何言ってっかわかんね
0458nobodyさん2010/12/21(火) 15:43:01ID:???
等質の発言を俺がエスパーしてみる
Pages -> = PagesController
URLが変わるし・・・ -> 同一のURL内で複数の内容を表示させたい
テンプレート(アクション) -> View TemplateなのかController Actionなのかわからん
actionを自動で作る -> ????????

CakePHPにエスパーしてもらうって無理ですよね?と等質が言ってると思われます。
0459nobodyさん2010/12/21(火) 15:48:10ID:???
データベースにViewテンプレートを格納する
改造かプラグインか何かを見かけた事あるし、
出来なくはないんじゃない?
なにしたいのかよく分からんから、
勝手に受け取った印象でだけど。
0460nobodyさん2010/12/21(火) 16:06:49ID:???
俺も出来ると思う。

でも何がしたいのかよく分からないし言ってることが分からないので、
俺も印象でだけど。
0461nobodyさん2010/12/21(火) 16:49:48ID:???
/controllers/test_controller.phpのindexアクションはURLだと
http://example.com/test/index

になりますよね?対象となるビューは/views/test/index.ctpにあるわけです。
では、/views/test/aaa.ctpというファイルを作ったとします。
当然、コントローラーに
function aaa(){}
と書かないと、http://example.com/test/aaa でアクセスできませんよね?

コントローラーにアクションを書かなくてもアクセスできる方法ってないですか?
と言うのが質問です。本気で何したいかわからないレベルの質問で済みません。
0462nobodyさん2010/12/21(火) 16:52:01ID:???
pages_controllerをコピーしてきて
名前変えればいい。
それだけだろ
0463nobodyさん2010/12/21(火) 16:59:47ID:???
>>461
いくつかヒントな
> 対象となるビューは/views/test/index.ctpにあるわけです。
コントローラアクションとビューは、必ずしも同じ名前である必要はないよ。
どのビューを使うかはコントローラアクション内で指定できる。だから条件分岐でビューを切り替えることも出来る。
> 当然、コントローラーに
> function aaa(){}
> と書かないと、http://example.com/test/aaa でアクセスできませんよね?
ConfigのRoutes.php の設定方法(ルーティング)をよく調べれ。
URLの操作もそこでできる。

あとはどう実装したいのか次第。
0464nobodyさん2010/12/21(火) 17:09:24ID:???
コントローラー通さないならhtmlでも置いとけば?
0465nobodyさん2010/12/22(水) 01:01:58ID:???
質問です。
CakePHP v 1.3.3

時間のかかる処理(a)のビューかルーティングが、
後から実行した処理(b)に奪われる現象に遭遇して困っております。
aのurlにアクセスすると、bのurlで表示されるべき内容が表示されてしまうと言った具合です。
urlはaのままです。

開発時には、そのような現象は発生せず、公開後、多くのユーザが訪れて発生しました。
複数の処理が実行される状況で発生するようです。

ですので、シングルトンが関わっているのかなと考えておりますが、
このような経験をした方は他にいらっしゃいますか?
または、ルーティングの設定ミスでもこのような現象は発生しますでしょうか?

解決方法をご存知でしたらご教示頂ければありがたいですmm
0466nobodyさん2010/12/22(水) 03:14:14ID:???
>>465
そもそもアプリ側にバグはない前提?
ログ見ても見当つかないんなら、応急処置でユーザ毎にある情報
(DBのレコード等)をロックするようにしてからじっくり考えるとか。
遅くなるのを要件が許せばね。
Cake側の機構でありえるのは知らず知らずのうちに
クエリかViewのキャッシュが働いているとかかな。
それもアプリ側の制御ミスだけど。

それとCakeを1.3.3で止めてるのは
最新だとパッチが当たらないくらいにコード改変しまくりなの?
0467nobodyさん2010/12/22(水) 13:47:23ID:???
処理というのはアクションと読み替えても良いんだろうか。
詳しく書いてはあるといえばあるんだけど、
トラブルが複雑そうなだけに、やっぱりよく分からないな。
まぁurlとも書いてあるからアクションで良いんだと思うんだけど、
その場合、routesの処理のところかdispatcherのとこのソースを見るのが良いんじゃないか?
別アクションが動く可能性のある分岐なのかそうじゃないか。

あと、このトラブルの場合、aとbの関係性が気になる。
同じコントローラーの別メソッドなのか、同じメソッド名だけど別コントローラーなのか、
片方がPrefixルーティングなのか、routesでのaとbの書かれ方などなど。

まぁ複雑そうだから、最終的にはソース嫁になりそうだけど。
0468nobodyさん2010/12/22(水) 14:31:24ID:???
>>465
requestActionで、コントローラアクションから別のコントローラアクションを呼びまくったりしてると
もう最悪だな
それと「時間のかかる処理」がなんなのかだろうけど、
>>466 で言及してるキャッシュ周り
>>467 で言及してるルーティング周り
あたりから見ていく感じかな
04694652010/12/22(水) 17:59:15ID:???
皆様ご意見ありがとうございます。

やはり最初はキャッシュを疑いましたが、
キャッシュ機能を無効にしても同様の現象が続いたので、
ルーティングに原因を求めた次第です。
サーバーの問題も疑いましたが、
aのページキャッシュにbの内容が保存されていたので、やはりアプリの問題だなと考えています。

>466
期待を胸に最新にアップデートしましたがダメでした、、。
少し説明が足りず申し訳なかったですが、
一般で言う、フロント,表側での現象なのでユーザ個別の情報をDBに取りに行くという処理はありません。
セッションやクッキーとは無縁のもっと単純なレベルの問題と考えています。

>467
処理と書かせて頂いたのは、リクエストを受けてからレンダリングまでの間で何が原因か不明なのでそう書きました。
ご指摘の通り、もう少し詳しく確認したところ、
同一コントローラで発生しているようで、コントローラ間を跨いで発生することは無いようです。
そして、それらはroutes.php内で独自のルーティング処理を記述しています。
ですので、やはりこの辺りが怪しいですね、、。

>468
"時間のかかる処理"ですが、単にリクエストからレンダリングが少々重たいページなんですよね、、。


ただやはり現象の発生が100%ではないのが、気持ち悪いです。
再現性、トラッキングが難しく、少々頭が痛いですが、やはりルーティング周りを確認していきたいと思います。
でも、ルーティング設定ミスなら100%再現されそうですよね、、。
0470nobodyさん2010/12/22(水) 18:33:59ID:???
> キャッシュ機能を無効にしても同様の現象が続いたので、
> aのページキャッシュにbの内容が保存されていたので、やはりアプリの問題だなと考えています。

ここ、矛盾して無いか?
ただ、キャッシュという事でひとつ思い出した。

http://dxd8.com/archives/209/

これじゃないか?
CentOS5でパッケージリポジトリからのPCRE使ってると、
確かこれにぶち当たるはずだよ。
04714652010/12/22(水) 19:19:44ID:???
>470
あっすみません。キャッシュを無効にする前の事です、、。

URLありがとうございます。
ルーティングでも何らかの場面でスラッグ変換処理行っている可能性はありますね。
ちょっと確認してみます。

しかし、発生頻度が数%で、アクセス数に比例して頻度が上がるんですよね、、。
ルーティングが別々のプロセス間で共用されている事を考えています。
シングルトンと言えども、
リクエストa,bに対して、プロセスa,bが実行される中、aとbが互いに干渉し合う事ってあるんでしょうか?
0472nobodyさん2010/12/22(水) 19:42:24ID:???
phpって1HTTP リクエスト毎に独立してんじゃないっけ?
04734652010/12/22(水) 21:27:27ID:???
ですのよね、、。何も信じられない、、。
今なら新興宗教とか信じられそうです。
年越さないようにがんばります、、。
04744652010/12/22(水) 21:28:37ID:???
ですのよって、、。おねぇか。
ですよねの間違いでした。
0475nobodyさん2010/12/22(水) 21:41:28ID:???
「ルーティングの設定に穴があった」だったら明るく解決だけど、
そうでない場合、少しイヤなバグだな・・・
Cake使ってる高負荷サイトってどの辺だろう
0476nobodyさん2010/12/22(水) 23:51:19ID:???
もしかして動的にモデルの構造が変更されるようなページ?
0477nobodyさん2010/12/23(木) 08:10:42ID:???
つーか、そんな時こそプロファイラじゃないか?
もしくはステップ実行。
xdebug使ってみては?
0478nobodyさん2010/12/23(木) 10:12:06ID:???
重いと評判のhtmlHelperですが、ローカル環境と本番環境のリンクずれを
気にしなくてよいので、Linkは積極的に使っています。

しかし、<base>でURLを切り替えれば、この問題もクリアされ、
簡潔なhtmlコードを書けばよいだけになる気がします。

リンクずれ以外にはhtmlヘルパーを使うメリットって何があるでしょうか?
教えていただければ幸いです。
0479nobodyさん2010/12/23(木) 10:44:37ID:???
HTTP→HTTPSの切替がしやすいってのがあった。
ま、相対パスだから当たり前なんだけど。
0480nobodyさん2010/12/23(木) 10:58:51ID:???
>>478
Routingを使うならURLの記述はarray()でしたほうが良い
アクション名変えるだけですべてのページ書き直すとか無理
04814782010/12/23(木) 12:05:15ID:???
>>479
hmhm。 そういう利点もあるのですね。


>>480
なるほど、自分はRouting使っているので、やはりLinkは引き続き使ったほうがよい
気がしてきました。
■ このスレッドは過去ログ倉庫に格納されています