Ich hätte gerne Hilfe beim Löschen des Caches mit einem externen Skript. Ich habe ein Skript, das jede Nacht Knoten hinzufügt, und ich möchte auch, dass es den Ansichts-Cache so löscht - ohne die MySQL-Abfrage selbst erkennen zu müssen.
Ich hätte gerne Hilfe beim Löschen des Caches mit einem externen Skript. Ich habe ein Skript, das jede Nacht Knoten hinzufügt, und ich möchte auch, dass es den Ansichts-Cache so löscht - ohne die MySQL-Abfrage selbst erkennen zu müssen.
Antworten:
Wenn Sie nur ein oder zwei bestimmte Cache-Bins löschen möchten, die Sie verwenden können cache_clear_all()
(vorausgesetzt, Ihr Skript verfügt über Drupal-Bootstrap):
cache_clear_all(NULL, 'cache_views');
cache_clear_all(NULL, 'cache_views_data');
Wenn Sie ein Skript ausführen, profitieren Sie wahrscheinlich von der Verwendung von Drush . Mit den Befehlen Drush php-eval und php-script können Sie nach dem Booten von Drupal problemlos einen Ausschnitt aus dem PHP-Code aufrufen (wie in den Beispielen, die in anderen Antworten auf diese Frage gezeigt werden). Ohne Drush müssten Sie einen Webdienst einrichten und Ihren Code mit wget oder curl ausführen oder versuchen, den Drupal-Bootstrap-Code selbst aufzurufen. Besser noch, Drush verfügt sogar über einen integrierten Befehl zum Löschen des Caches, sodass Sie sich keine Gedanken über das Schreiben von PHP-Code machen müssen, wenn dies alles ist, was Sie mit Ihrem Skript tun möchten. Benutz einfach:
cd /path/to/drupal/sites/default && drush cache-clear all
Möglicherweise möchten Sie auch mehr über Site-Aliase erfahren. Wenn Sie einen Alias mit dem Namen @site definieren, können Sie stattdessen Folgendes verwenden:
drush @site cache-clear all
drush cc views
in Ihrem Skript als Benutzer mit dem richtigen Zugriff.
drush cc views
; Drush-Befehle rufen jedoch normalerweise API-Funktionen ohne Zugriffsüberprüfung direkt auf. Es ist normalerweise nicht erforderlich, einen Benutzer anzugeben.
Ich schlage vor, das Menü zu registrieren und es extern aufzurufen. Geben Sie beim Rückruf Ihren Code ein (Cache löschen).
function yourmodule_menu() {
$items = array();
$items['customclearcache'] = array(
'title' => 'clear cache',
'description' => 'clear cache',
'page callback' => 'yourmodule_clear_cache',
'access callback' => TRUE , // or any access you need
);
return $items;
}
function yourmodule_clear_cache(){
cache_clear_all(NULL, 'cache_views');
cache_clear_all(NULL, 'cache_views_data');
drupal_set_message(t('cache clearing completed'));
drupal_goto("node"); // or any page you want
}
und Sie können den Cache leeren, indem Sie diese URL aufrufen : yoursite.com/customclearcache
.
Auch wenn Sie damit den drush
Cache gelöscht habendrush cc all
//first go to your installed site path
$cd /path/to/drupal
$drush cc all
Der Cache kann am besten extern mit Drush-Befehlen geleert werden.
Sie könnten drush cc
im Terminal verwenden und es wird Sie fragen, was genau Sie löschen möchten. Im Beispiel wird gefragt:
Geben Sie eine Nummer ein, um den zu löschenden Cache auszuwählen.
[0] : Cancel
[1] : all
[2] : drush
[3] : theme-registry
[4] : menu
[5] : css-js
[6] : block
[7] : module-list
[8] : theme-list
[9] : registry
[10] : views
Wählen Sie Ihre Option und Sie können den Cache extern löschen.
Weitere Informationen zum Drush und den Befehlen finden Sie auf der drush GitHub-Seite .
Wenn Sie den Cache extern leeren möchten, verwenden Sie am einfachsten Folgendes drush
:
drush -y cc all
Dies würde alle Drupal-Caches löschen (aber nicht alle Caches ). In Drupal 8 : drush cr
.
Eine andere Möglichkeit besteht darin, ein einfaches Skript zu schreiben, das alle Tabellen abschneidet / löscht, mit denen begonnen wird cache_
, beispielsweise mit dem folgenden Einzeiler:
echo "SHOW TABLES LIKE 'cache%'" | drush sqlc --extra=--skip-column-names | xargs -L1 -I% echo "DELETE FROM %;" | drush sqlc --extra=-v
TRUNCATE
die cache_views
Tabelle in der Datenbank.