2011-12-07 2 views

답변

16

Magento에서는 제품, 정적 블록 등을 변경할 때마다 데이터베이스의 데이터가 더 이상 캐시에있는 것과 동일하지 않다는 것을 인식합니다. 죄송 합니다만 Magento는 무엇을 캐시 데이터가 다른지 알지 못합니다. 단지 무언가가과 다릅니다.

시스템> 캐시 관리으로 이동하고 유효하지 않은 캐시 유형을 새로 고침해야합니다.

편집 :

이 모듈을 만들고 (또는 기존 모듈 사용) 캐시를 새로 고치는 cron 작업을 설정하는 데 사용할 수 있습니다. {네임 스페이스} 해당 파일 내부/{모듈 이름} /Model/Observer.php

: 파일 만들기에서

<?php 
class <namespace>_<modulename>_Model_Observer { 

    public function refreshCache() { 
    try { 
     $allTypes = Mage::app()->useCache(); 
     foreach($allTypes as $type => $blah) { 
     Mage::app()->getCacheInstance()->cleanType($type); 
     } 
    } catch (Exception $e) { 
     // do something 
     error_log($e->getMessage()); 
    } 
    } 

} 

을 모듈의 등/config.xml에 : 이제

<config> 
    ... 
    <crontab> 
    <jobs> 
     <{modulename}_refresh_cache> 
     <schedule><cron_expr>* * * * *</cron_expr></schedule> 
     <run><model>{modulename}/observer::refreshCache</model></run> 
     </{modulename}_refresh_cache> 
    </jobs> 
    </crontab> 
    ... 
</config> 

로 cron이 서버에서 올바르게 구성되어 있으면 cron이 실행될 때마다 캐시가 자동으로 업데이트됩니다.

+3

캐시를 새로 고치는 방법을 이해합니다. 캐시가 무효화 된 것을 볼 때 수행합니다. 캐시가 무효화되었다는 것을 어떻게 알았는지 정말로 모르겠습니다. 그리고 관련 - 그것은 그것이 무효라는 것을 안다면 왜 자동으로 캐시를 새로 고치지 않습니까? 캐시를 새로 고칠 위험이 있습니까? – localfilmmaker

+0

변경할 때마다 magento가 이벤트를 실행합니다. 관련 이벤트를 무효화하는 이벤트에 대한 리스너가 있습니다. 왜 이렇게하는지 (왜 자동으로 리프레시되지 않는지) 이것은 궁극적으로 디자인 결정이지만 콘텐츠를 준비 할 수있는 것과 관련이 있습니다. 예를 들어 서로 관련된 여러 제품을 변경 한 다음 캐시를 새로 고칠 수 있습니다. cron이 서버에서 실행될 때마다 실행되는 cron 작업으로이를 극복하고 캐시를 자동으로 새로 고치는 기능을 호출합니다. 코드를 포함하도록 원래 답변을 수정하겠습니다. –

+3

아주 나쁜 해결책 : 모든 캐시를 새로 고치는 cron을 설정할 때마다 캐시를 ​​사용 중지하는 것과 같습니다 ... 적어도 캐시가 유효하지 않은지 확인하고 매 10 분/30 분마다 cron을 설정해야합니다. – WonderLand

1

2015 : AOE Sheduler는 cronjob으로 캐시를 지울 수 있습니다. 변경 작업

"core_clean_cache"59 * * * *에 (매일 2시 반) 30 2 * * *에서

(각 59 분).

0

@Magento Guy의 대답은 정확하지만 아래의 해결책은 Magento의 무효화 된 캐시를 새로 고치는 데 도움이 될 수 있다고 생각합니다.

저는 Bitnami Magento Stack을 사용합니다. 아래의 해결책은 내가 찾은 최고의 해결책이었습니다.

나는 Mage_Shell_Class PHP 파일을 만들려고했으나 성공하지 못했습니다. (잘못된 캐시 배열은 실행될 때 항상 비어 있었고, 무엇이 문제인지는 모르겠습니다).

내가 PHP 파일 'sample.php'만들었습니다

<?php 

require 'app/Mage.php'; 

$invalid = Mage::app()->getCacheInstance()->getInvalidatedTypes(); 

foreach($invalid as $i) 
{ 
    Mage::app()->getCacheInstance()->cleanType($i["id"]); 
} 

내가 Magento의 루트 폴더에 배치 한, 나는 루트 사용자로 실행되는 cron 작업을 사용하여 시작합니다.

따라서, 루트 사용자에 cronjob를 만들려면 다음

sudo crontab -u root -e 

을 그리고 이것은 실행 내 명령 줄을이었다

* * * * * . /opt/bitnami/scripts/setenv.sh ; /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/sample.php >> /var/log/cron/cron.log 2>&1 

이 라인의 일부 부품이 내 문제에 매우 특별한 있습니다 :

  1. 무효화 된 캐시를 새로 고치기 때문에 매분마다 실행하기로 결정했습니다.
  2. setenv.sh는이 특정 bitnami 스택을 다룰 때 환경을 설정하는 데 도움이되는 스크립트입니다.
  3. 이 스크립트의 출력을 얻으려면 내가 작성한 디렉토리 (/ var/log/log/cron)에 대한 올바른 권한을 부여했습니다.

아마도 cron line 명령을 변경해야하지만 아마 도움이 될 것 같습니다.

관련 문제