2016-10-11 5 views
3

Ich habe dieses Problem, wenn ich eine Spalte zu einer meiner Entitäten hinzufügen und es für die Produktion freigeben Ich muss Apache neu starten, um Doctrine Metadaten APC/APCU-Cache zu löschen.Wie Doctrine APC-Cache für die Produktion zu löschen?

Ich habe alle Befehle unten versucht, aber keine für mich gearbeitet:

php -r "apc_clear_cache();" 
php -r "apcu_clear_cache();" 

sudo php app/console doctrine:cache:clear-metadata 
sudo php app/console doctrine:cache:clear-query 
sudo php app/console doctrine:cache:clear-result 

ich diese Fehlermeldung für --env = prod

I
sudo php app/console doctrine:cache:clear-metadata --env=prod 
sudo php app/console doctrine:cache:clear-query --env=prod 
sudo php app/console doctrine:cache:clear-result --env=prod 

[LogicException] 
    Cannot clear APC Cache from Console, its shared in the Webserver memory and not accessible from the CLI. 

Nur Weg bekommen kann es Lehre auffrischen Cache ist der Neustart meines Apache-Servers, der manchmal ein Problem sein kann.

Meine Cache-Einstellungen für Doctine in meinem Symfony Projekt:

doctrine: 
    orm: 
     metadata_cache_driver: apc 
     result_cache_driver: apc 
     query_cache_driver: apc 
     second_level_cache: 
      enabled: true 
      log_enabled: false 
      region_cache_driver: apc 

Wie kann ich in diesem Fall klar APC-Cache ohne Apache jedes Mal neu zu starten löse ich neues Schema Updates zur Produktion. Dies ist noch schlimmer, wenn Sie viele Server hinter einem Load Balancer haben.

Antwort

0

Anstatt zu versuchen, es von der Konsole zu löschen, versuchen Sie es von einem Controller oder app.php.

Ich habe diese Zeile in der app.php kommentiert:

//apcu_clear_cache(); 

Wenn ich den Cache tun müssen, um zu löschen, ich unkommentiert es einfach und jede Seite laden. Für mich geht das.

0

Werfen Sie einen Blick auf die Smart-Core/AcceleratorCacheBundle Geben Sie einen Befehl zum Löschen von PHP Accelerator-Cache von CLI.

Dies kann ermöglichen, den Cache als cli Befehl zu spülen als:

php app/console cache:accelerator:clear 

Die Doc auch ein Rezept Capifony.

Hope this Hilfe

+1

Vorzugsweise möchte ich kein anderes Bundle nur dafür verwenden. – PMoubed

0

Beim Ausführen apc_clear_cache(); nicht von cli, sondern von deiner App, wird der Doku-Cache gelöscht. Sie können einige Tasten im Admin-Panel machen, oder curl Anfrage nach jeder Aktualisierung angegebener Datei auf den Server senden, zum Beispiel:

http://example.com/apc_cache_clear.php

innerhalb autorize Anfrage und klar Cache

+0

Wie wäre es, wenn Sie 100 Server hätten? – PMoubed

0

Sie müssen diese Php verstehen läuft unter Apache (oder Nginx) ist anders als die PHP läuft über die Befehlszeile, sie sind 2 Linux-Prozess, die nicht kommunizieren können.

Also, auch wenn Sie den Cache über CLI löschen können, hat dies keinen Einfluss auf die PHP unter Apache.

Der einfachste Weg, um apcu_clear_cache innerhalb eines Symfony-Controllers aufzurufen, oder Sie können den Apache Php-Socket über die CLI verwenden.

Ich empfehle ein Werkzeug wie http://gordalina.github.io/cachetool/ zu verwenden, die das perfekt machen.

Verwandte Themen