有时我会在本地实现更改并且它们工作正常,我将它们复制到我的远程Web服务器并且忽略更改.(代码完全相同.)
我进入core.php,将调试更改为3,再次检查......它有效!
我觉得这与缓存有关,但我不知道到底要改变什么.
dei*_*zel 30
CakePHP有一个缓存位于/app/tmp/cache.目录结构如下所示:
# /app/tmp/cache
# /app/tmp/cache/models
# /app/tmp/cache/persistent
# /app/tmp/cache/views
Run Code Online (Sandbox Code Playgroud)
通常遇到的主要问题是模型缓存.当调试关闭(即在生产中)并导致CakePHP调度时,它会内省所有数据库表的模式,并将它们存储在models上面文件夹中的平面文件中.如果您不删除此文件夹中的文件,CakePHP将开始说明当数据库中显然存在模型/表/字段时,它们不存在.
如果在应用程序中启用了视图缓存,那么第一次呈现视图时,CakePHP会将平面文件编译到该views文件夹,以防止在下一个请求时再次呈现这些视图.
在CakePHP的引导过程中,它必须先确定您在安装中使用的目录结构,然后才能访问重要文件(如database.php).因此,CakePHP将生成缓存文件到persistent目录,其中包含每个重要目录和文件的绝对路径,您正在使用的任何插件,甚至您创建的任何本地化,因此它可以在不重新分析.pot文件的情况下快速翻译您的应用程序.
因此,简单地说,每当您对正在生产的应用程序进行代码更改时,您必须记住删除这些目录中的所有文件,或者将其作为部署机制的一部分添加.但是,您不能删除任何目录.
将debug更改为3的原因是因为当打开调试模式(任何值大于零)时,缓存将在每个请求中被清除并重新生成,但是 - 虽然这有效 - 但它不容易自动化.
有许多方法可以以编程方式执行此操作 - 包括shell命令,CakePHP插件,Capistrano配置,Ant文件 - 但也可以手动执行此操作.
您可能会发现这对于清除CakePHP 1.2,1.3中的缓存很有用,我认为这可以在2.x中工作(稍微修改以使用新的CakeRequest类):
if(Configure::read('debug') > 0 and isset($this->params['url']['emptycache'])) {
// clear Cache::write() items
Cache::clear();
// clear core cache
$cachePaths = array('views', 'persistent', 'models');
foreach($cachePaths as $config) {
clearCache(null, $config);
}
$this->Session->setFlash('Cache cleared', 'default', array(), 'info');
}
Run Code Online (Sandbox Code Playgroud)
将其添加到AppController :: beforeFilter()中.
基本上,当您处于开发模式时,上面的代码可以通过在URL中附加查询字符串来轻松清除缓存,例如mydomain.com/?emptycache - 它将删除所有Cake的缓存文件.
| 归档时间: |
|
| 查看次数: |
15508 次 |
| 最近记录: |