프로그래밍 방식으로 Magento의 캐시를 플러시 할 수 있습니까?


23

여러 릴리스 스크립트에서 Mage를 부트 스트랩하여 릴리스 구성을 자동화하고 있습니다. 스크립트가 끝나면 Magento의 캐시를 플러시해야합니다.

Mage클래스 또는 메소드 중 하나를 사용하여 캐시를 플러시하는 방법이 있습니까?


1
이것을 시도하십시오 : Mage :: app ()-> cleanCache () 또는 Mage :: app ()-> getCacheInstance ()-> flush ();
Stefan Gregori

답변:


25

프로그래밍 방식으로 캐시를 플러시하려면 다음 코드를 시도하십시오

Mage::app()->cleanCache()

또는

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

40

정말로 원한다면 하나 이상의 캐시 유형을 정리할 수도 있습니다. 이것은 실제로 관리자 섹션이 수행하는 방식입니다. 아래에Mage_Adminhtml_CacheController::massRefreshAction

모든 매개 변수를 반복 types하고 다음을 호출 한다는 것을 알 수 있습니다.

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

가능한 유형은 다음과 같습니다.

  1. 설정
  2. 나열한 것
  3. block_html
  4. 옮기다
  5. 컬렉션
  6. eav
  7. config_api
  8. config_api2
  9. 전체 페이지

그리고 이것들은 전화로 반환 할 수 있습니다 Mage::app()->getCacheInstance()->getTypes()


3
프로그래밍 방식으로 캐시 지우기로 어려움을 겪고있는이 의견은 선택한 답변보다 유용합니다. dispatchEvent를 호출하는 것이 중요하기 때문에 dispatchEvent 호출을 추가 할 때까지 Varnish ESI가 지워지지 않았습니다. (물론 다른 모듈이 그에 따라 코드를 실행하도록 허용 할 것입니다)
Barry Carlyon

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:incrementalMagento 설정 스크립트의보다 제어 된 실행 에 대해서는 부속 명령을 보십시오 .


"특히 배포 스크립트를 실행하는 동안 캐시를 플러시해서는 안되므로"문에 대한 추가 통찰력을 제공 할 수 있습니까?
STW

1
Magento에는 자동으로 업그레이드를 실행하는 기능이 있습니다. 구성 캐시를 다시 작성해야 할 때 트리거됩니다. 해당 기능이 필요하고 신중하게 코드를 작성하지 않는 한, 귀하 또는 동료가 예상하지 못한 병렬 프로세스를 도입하게됩니다.
Melvyn

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.