Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
441 views
in Technique[技术] by (71.8m points)

cakephp - why do some changes NOT happen until I switch debugging to 3?

Sometime I will implement changes locally and they work fine, I copy them to my remote webserver and the changed are ignored. (The code is identical.)

I go into core.php, change debugging to 3, check again... it works!

I have a feeling it's something to do with cache but I don't know what exactly to change.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

CakePHP has a cache located in /app/tmp/cache. The directory structure looks like this:

# /app/tmp/cache
# /app/tmp/cache/models
# /app/tmp/cache/persistent
# /app/tmp/cache/views

The main issue usually experienced is with the model cache. When debug is off (ie. in production) and you cause CakePHP to dispatch, it introspects the schema of all your database tables and stores these in flat files in the models folder above. If you do not delete the files in this folder, CakePHP will start to say models/tables/fields don't exist when they clearly do in your database.

If you enable view caching in your application, when views are rendered for the first time CakePHP will compile flat files to the views folder to prevent having to render these views again on the next request.

During CakePHP's bootstrap process it has to determine the directory structure you are using in your installation before it can access important files (like database.php). As such, CakePHP will generate cache files to the persistent directory with the absolute paths to each and every important directory and file, any plugins you are using and even any localisations you have created so it can quickly translate your application between languages without reparsing .pot files.

So, simply put, you have to remember to delete all of the files in these directories whenever you make code changes to an application that is in production, or add this as part of your deployment mechanism. You must not delete any of the directories however.

The reason changing debug to 3 works for you is because when debug mode is turned on (at any value greater zero) the cache is cleared and regenerated on every request, but - while this works - it is not easy to automate.

There are a number of ways to do this programmatically - including shell commands, CakePHP plugins, Capistrano configs, Ant files - but one can also just do so manually.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...