2012-08-12 126 views
3

我在Zend Framework中设置了元数据缓存,因为批次DESCRIBE查询被执行并且影响了性能。文件中的Zend元数据缓存

$frontendOptions = array ('automatic_serialization' => true); 
$backendOptions = array ('cache_dir' => CACHE_PATH . '/db-tables-metadata'); 
$cache = Zend_Cache::factory(
    'Core', 
    'File', 
    $frontendOptions, 
    $backendOptions 
); 
Zend_Db_Table::setDefaultMetadataCache($cache); 

我确实可以看到创建的缓存文件,并且网站工作的很好。

但是,当我启动单元测试或执行DB查询的同一应用程序的脚本时,最终出现错误,因为Zend无法读取缓存文件

这是因为在网站上,缓存文件由WWW用户创建的,当我运行的PHPUnit或脚本,它试图用我的用户阅读它们,也未能

您是否看到任何解决方案?我有一些quickfix的想法,但我正在寻找一个好的/稳定的解决方案。如果可能的话(出于实际原因),我宁愿避免运行phpunit或脚本www

回答

1

尝试sudo命令。像这样$sudo -u www php -f run-tests.php

编辑

也许

$backendOptions = array ('cache_dir' => CACHE_PATH . '/db-tables-metadata', 'cache_file_umask' => 0755, 'cache_file_perm' => 0755); 
+0

我宁愿找到一个明确的解决办法,而不是每次都必须记住使用'sudo'运行我的脚本。 – 2012-09-03 11:18:46

+0

哦,我没有看到你编辑(没有通知),它似乎很好,我不知道你可以强制文件的权利!我会尽快测试它 – 2012-09-07 08:29:38

+0

非常感谢你! – 2012-09-07 17:20:21

1

你想在单元测试期间缓存表元数据吗?我通常会在开发/测试中禁用该缓存。

您可以尝试将您的测试用户添加到www组(usermod -a -G www testuser)。

机会是缓存文件有标准644权限,这意味着你的用户仍然不能修改这些文件,但如果你的测试然后在设置上的缓存目录的权限,以777你应该能够编写新文件到该目录。

如果您使用CGI/FastCGI运行PHP,您可以让PHP以您的用户身份运行,而不是通用的www用户。或者,如果您使用的是Apache模块,则mod_suphp将允许您以用户身份运行PHP。

对不起它没有太多的帮助,但希望可以给你一些更多的想法..

+0

非常感谢您的想法。首先,这不仅仅用于开发/测试,我有不同用户在生产中推出的后台脚本。不幸的是,缓存文件的访问权限是'-rw -------',所以不能被其他用户读取。目录是777,但它会尝试写入相同的文件,因此会引发异常。 – 2012-08-12 19:13:27

+0

我看到,根据您的操作系统,您可能能够安装扩展文件访问控制(例如,Ubuntu上的[facl](http://beginlinux.com/server_training/server-managment-topics/1038-ubuntu-804-access-control-lists))。您可以使用ACL来允许某些用户读取/写入www的文件。 – drew010 2012-08-12 19:19:09

-1

我有类似类型的问题后,我能找到的,因为我是跑其他几个应用程序服务器缓存渐渐发生了冲突意味着2应用程序使用相同的缓存,尝试命名所有类型的cacheobject

并且如果你想要,你也可以配置App.php文件来创建一个不同的缓存文件进行单元测试,这是共享主机中常见的问题。