프로그래밍 방식으로 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.