2012-08-12 101 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文件來創建一個不同的緩存文件進行單元測試,這是共享主機中常見的問題。