Magentoのキャッシュをプログラムでフラッシュするにはどうすればよいですか?


23

いくつかのリリーススクリプトでMageをブートストラップすることにより、リリース構成を自動化しています。スクリプトの最後に、Magentoのキャッシュをフラッシュする必要があります。

Mageクラスまたはメソッドのいずれかを使用してキャッシュをフラッシュする方法はありますか?


1
これを試してください:Mage :: app()-> cleanCache()またはMage :: app()-> getCacheInstance()-> flush();
ステファングレゴリ

回答:


25

次のコードを試して、プログラムでキャッシュをフラッシュしてください

Mage::app()->cleanCache()

または

Mage::app()->getCacheInstance()->flush(); 

40

本当に必要な場合は、1つ以上のキャッシュタイプのみを削除することもできます。これは、実際には管理セクションが行う方法です。下Mage_Adminhtml_CacheController::massRefreshAction

すべてのパラメーターtypesをループし、次を呼び出していることがわかります。

$tags = Mage::app()->getCacheInstance()->cleanType($type);
Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
$updatedTypes++;

可能なタイプは次のとおりです。

  1. config
  2. レイアウト
  3. block_html
  4. 翻訳する
  5. コレクション
  6. eav
  7. config_api
  8. config_api2
  9. 全ページ

そして、これらを呼び出すことで返すことができます Mage::app()->getCacheInstance()->getTypes()


3
プログラムでキャッシュをクリアすることにこだわっているため、このコメントは選択した回答よりも便利です。dispatchEventを呼び出すことが重要であるため、dispatchEvent呼び出しを追加するまで、私のVarnish ESIはクリアされませんでした。(もちろん、他のモジュールがそれに応じてコードを
起動

6

すべてのキャッシュをクリアする簡単な外部スクリプト:

<?php

require_once './app/Mage.php';
umask(0);
Mage::app('default');
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

try {
    $allTypes = Mage::app()->useCache();
    foreach($allTypes as $type => $value) {
        Mage::app()->getCacheInstance()->cleanType($type);
        Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
        echo "{$type} </br>";
    }
    echo 'done';
} catch (Exception $e) {
    echo $e->getMessage();
}

3

n98-magerunを使用できます。特に、展開スクリプトの実行中にキャッシュをフラッシュしないでください。またsys:setup:incremental、Magentoセットアップスクリプトのより制御された実行については、サブコマンドを参照してください。


「特に、展開スクリプトの実行中にキャッシュをフラッシュしないでください」というステートメントに、いくつかの追加の洞察を提供できますか?
STW

1
Magentoには、アップグレードを自動的に実行する機能があります。これは、構成キャッシュを再構築する必要があるときにトリガーされます。その機能が特に必要で、それを注意深くコーディングしない限り、あなたや同僚が予想していなかったかもしれない並列プロセスを導入します。
メルビン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.