0

app/console cache:clear は XCache (または APC) をクリアしないため、AppCache を使用している場合app.php(例: bootstrap.php.cache およびその他の生成されたすべての.cache.ファイルがキャッシュされます)、再デプロイ後に大きな問題が発生する可能性があります。

app.php (かなりデフォルト)

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
$loader = new \Symfony\Component\ClassLoader\XcacheClassLoader('sf2dc4', $loader);
$loader->register(true);
require_once __DIR__.'/../app/AppKernel.php';
require_once __DIR__.'/../app/AppCache.php';

$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
$kernel = new AppCache($kernel);
Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

インストールは4つの「アプリケーション」サーバーに分散されているため、再デプロイ時にキャッシュを確実にクリアする方法はありません. 必要なのは、環境内のすべてのサーバーに PHP/XCache をフラッシュするように指示する方法です。APCBundle https://github.com/ornicar/ApcBundleはそのように見えますが、APC でしか機能しません。

関連する問題として、doctrine:cache:clear-queryまたはclear-metadataコマンドの使用があります。XCache を ORM メタデータのキャッシュ実装として使用している場合、これらのコマンドは、「すべてのメタデータ キャッシュ エントリをクリアするとキャッシュ エントリが正常に削除されました」と書いていても、実際には何もフラッシュしません。-> XCache 管理者を調べると、すべてがまだそこにあることがわかります。Symfony コマンドは PHP CLI 環境で実行されるため、これは実際に予測されます。繰り返しますが、APC バンドルはキャッシュを正しくフラッシュします。

a)コマンドがすべてをフラッシュしたと言うのは「バグ」ですか、それとも何か不足していますか?b) すべてのサーバーでこれらのキャッシュを確実にフラッシュするにはどうすればよいでしょうか? c) APCBundle のような同様の解決策を書いた人はいますか? それらの問題を処理するためのベスト プラクティスを考え出すことができますか? d) 再デプロイ後に各 Apache を再起動する方が実現可能ですか (難しい方法ではありません。システム管理者はその考えで私を殺します)。

4

1 に答える 1