外部からキャッシュをクリアする方法は?


6

外部スクリプトを使用してキャッシュをクリアする方法を教えてください。私は毎晩ノードを追加するスクリプトがあります。また、自分でMySQLクエリを作成する必要なく、ビューキャッシュをクリアしたいのです。

回答:


7

使用できる特定のキャッシュビンを1つまたは2つだけ消去したい場合cache_clear_all()(スクリプトにDrupalがブートストラップされていると想定):

cache_clear_all(NULL, 'cache_views');
cache_clear_all(NULL, 'cache_views_data');

これは非Drupalスクリプトなので、おそらくそのようにして、必要なファイルをinclude()します。ありがとう!
ダニエルホルム

10

スクリプトを実行している場合は、おそらくDrushを使用することでメリットが得られます。Drushのphp-evalコマンドとphp-scriptコマンドを使用すると、Drupalのブートストラップ後に簡単にphpコードのスニペット(この質問の他の回答に示されている例など)を呼び出すことができます。Drushがなければ、Webサービスをセットアップし、wgetまたはcurlを使用してコードを実行するか、Drupalブートストラップコードを自分で呼び出そうとする必要があります。さらに良いことに、Drushにはキャッシュをクリアするための組み込みコマンドが付属しているので、スクリプトからやりたいことがすべてであれば、phpコードの記述について心配する必要はまったくありません。ただ使用する:

cd /path/to/drupal/sites/default && drush cache-clear all

また、サイトのエイリアスについて知りたい場合もあります。@siteと呼ばれるエイリアスを定義する場合は、代わりに次を使用できます。

drush @site cache-clear all

Drushはここでは明確な解決策のようですが、OPはビューのキャッシュをクリアしたいと考えています。drush cc views適切なアクセス権を持つユーザーとしてスクリプトを試してください。
Citricguy 2012

はい、あなたは正しいですdrush cc views。ただし、Drushコマンドは通常、アクセスチェックなしでAPI関数を直接呼び出します。通常、ユーザーを指定する必要はありません。
greg_1_anderson 2012

残念ながら、私はこのサーバーでそのようなアクセス権を持っていません。それ以外の場合は、Drushを本当に楽しんでいます!
ダニエルホルム

6

メニューを登録して外部から呼び出すことをお勧めします。そのコールバックでは、コードを挿入します(キャッシュをクリア)

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
}

また、次のURLを呼び出すことでキャッシュをクリアできますyoursite.com/customclearcache

また、drushクリアキャッシュをインストールした場合drush cc all

   //first go to your installed site path
  $cd /path/to/drupal 
   $drush cc all

5
アクセスを確認し、URLを繰り返し呼び出すと、サイトが簡単にダウンする可能性がある
Berdir

@Berdir、はい、私はあなたに同意します、これは単にアイデアを得てそれを開発する方法です。
ユセフェリ2012

スクリプトは実際のDrupalコードの外にあります。これは私のモジュールに最適ですが、この正確なケースではありません。でもありがとう!
ダニエルホルム

このようなコールバックは、乱用を避けるために、いくつかの秘密トークンと理想的にはアンチcsrfトークンをチェックする必要があります。
15

@gregglesはい私はあなたに同意します、または指定されたアクセスのコールバック;)
Yuseferi

0

外部からキャッシュをクリアする最良の方法は、Drushコマンドを使用することです。

あなたはdrush ccターミナルで使うことができ、それはあなたが正確に何をクリアしたいかを尋ねます。例ではそれは要求します:

数値を入力して、クリアするキャッシュを選択します。

 [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   

オプションを選択すると、外部からキャッシュをクリアできます。

drushとそのコマンドの詳細については、drush GitHubページにアクセスしてください


0

外部からキャッシュをクリアしたい場合、最も簡単な方法はを使用することdrushです。例えば:

drush -y cc all

すべてのDrupalキャッシュをクリアします(ただし、すべてのキャッシュをクリアするわけではありません)。Drupalの8では:drush cr

他の方法はcache_、たとえば次のワンライナーを使用して、で始まるすべてのテーブルを切り捨て/削除する単純なスクリプトを書くことです。

echo "SHOW TABLES LIKE 'cache%'" | drush sqlc --extra=--skip-column-names | xargs -L1 -I% echo "DELETE FROM %;" | drush sqlc --extra=-v 

-2

TRUNCATEcache_viewsデータベース内のテーブル。


ごめんなさい。十分に注意深く読みませんでした。
Gaelan 2012

大丈夫。しかし、ええ、私はそのようにしたくはありませんでしたが、むしろ「安全な」Drupal関数を使用しました。
ダニエルホルム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.