3

多くDESCRIBEクエリが実行され、パフォーマンスに影響を与えたため、ZendFrameworkでメタデータキャッシュを設定しました。

$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がキャッシュファイルを読み取れなかったため、エラーが発生します。

これは、Webサイトでは、キャッシュファイルがwwwユーザーによって作成されており、 phpunitまたはスクリプトを実行すると、ユーザーと一緒にそれらを読み取ろうとして失敗するためです。

それに対する解決策はありますか?私はいくつかのクイックフィックスのアイデアを持っていますが、私は良い/安定した解決策を探しています。そして、可能な限りphpunitやスクリプトを実行することは避けたいと思いwwwます(実際的な理由から)。

4

3 に答える 3

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);
于 2012-09-03T10:52:49.787 に答える
1

単体テスト中にキャッシュされたテーブルメタデータが必要ですか?私は通常、開発/テストでそのキャッシュを無効にします。

テストユーザーをwwwグループに追加してみてください(usermod -a -G www testuser)。

キャッシュファイルには標準の644アクセス許可がある可能性があります。つまり、ユーザーはファイルを変更できませんが、777テスト中にキャッシュディレクトリのアクセス許可をに設定すると、そのディレクトリに新しいファイルを書き込むことができるはずです。

CGI / FastCGIを使用してPHPを実行する場合は、一般ユーザーではなくユーザーとしてPHPを実行できwwwます。または、Apacheモジュールを使用している場合はmod_suphp、ユーザーとしてPHPを実行することもできます。

申し訳ありませんが、あまり助けにはなりませんが、うまくいけば、あなたにいくつかのアイデアを与えることができます。

于 2012-08-12T18:38:21.760 に答える
-1

私は同じような問題を抱えていました後で私はそれを見つけることができました、私が他のいくつかのアプリケーションサーバーを実行していたので、2つのアプリケーションが同じキャッシュを使用していることを意味するキャッシュが衝突していました、すべてのタイプのcacheobjectに名前を付けてみてください

また、必要に応じて、単体テスト用に別のキャッシュファイルを作成するようにApp.phpファイルを構成することもできます。これは、共有ホスティングで発生する通常の問題です。

于 2012-09-04T17:12:31.523 に答える