Tôi muốn một số trợ giúp làm thế nào để xóa bộ đệm bằng cách sử dụng một tập lệnh bên ngoài. Tôi có một tập lệnh thêm các nút mỗi đêm và tôi cũng muốn nó xóa bộ đệm xem vì vậy - mà không phải tự mình truy vấn MySQL.
Tôi muốn một số trợ giúp làm thế nào để xóa bộ đệm bằng cách sử dụng một tập lệnh bên ngoài. Tôi có một tập lệnh thêm các nút mỗi đêm và tôi cũng muốn nó xóa bộ đệm xem vì vậy - mà không phải tự mình truy vấn MySQL.
Câu trả lời:
Nếu bạn chỉ muốn xóa một hoặc hai thùng bộ nhớ cache cụ thể mà bạn có thể sử dụng cache_clear_all()
(giả sử tập lệnh của bạn có Drupal bootstrapping):
cache_clear_all(NULL, 'cache_views');
cache_clear_all(NULL, 'cache_views_data');
Nếu bạn đang chạy một tập lệnh, bạn có thể sẽ được hưởng lợi từ việc sử dụng Drush . Với các lệnh Drush php-eval và php-script, bạn có thể dễ dàng gọi một đoạn mã php (chẳng hạn như các ví dụ được hiển thị trong các câu trả lời khác cho câu hỏi này) sau khi bootstrapping Drupal. Nếu không có Drush, bạn sẽ phải thiết lập một dịch vụ web và sử dụng wget hoặc curl để chạy mã của mình hoặc cố gắng tự gọi mã bootstrap của Drupal. Tốt hơn nữa, Drush thậm chí còn đi kèm với một lệnh tích hợp để xóa bộ đệm, vì vậy bạn không cần phải lo lắng về việc viết bất kỳ mã php nào, nếu đó là tất cả những gì bạn muốn làm từ tập lệnh của mình. Chỉ dùng:
cd /path/to/drupal/sites/default && drush cache-clear all
Bạn cũng có thể muốn tìm hiểu về bí danh trang web; nếu bạn xác định một bí danh gọi là @site, thì bạn có thể sử dụng:
drush @site cache-clear all
drush cc views
trong tập lệnh của bạn với tư cách là người dùng có quyền truy cập chính xác.
drush cc views
; tuy nhiên, các lệnh Drush theo quy ước thường gọi các hàm API trực tiếp mà không cần kiểm tra truy cập; thông thường không cần thiết phải chỉ định người dùng.
Tôi đề nghị menu đăng ký và gọi bên ngoài nó, trong cuộc gọi lại, hãy đặt mã của bạn (xóa bộ nhớ cache)
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
}
và bạn có thể xóa bộ nhớ cache bằng cách gọi url này : yoursite.com/customclearcache
.
Ngoài ra nếu bạn cài đặt drush
xóa bộ nhớ cache với nódrush cc all
//first go to your installed site path
$cd /path/to/drupal
$drush cc all
Cách tốt nhất để xóa bộ nhớ cache bên ngoài là sử dụng các lệnh Drush.
Bạn có thể sử dụng drush cc
trong thiết bị đầu cuối và nó sẽ hỏi bạn chính xác những gì bạn muốn xóa. Trong ví dụ, nó sẽ yêu cầu:
Nhập một số để chọn bộ nhớ cache để xóa.
[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
Chọn bạn tùy chọn và bạn có thể xóa bộ nhớ cache bên ngoài.
Để biết thêm chi tiết về drush và các lệnh của nó, bạn có thể truy cập trang GitHub drush .
Nếu bạn muốn xóa bộ nhớ cache bên ngoài, cách dễ nhất là sử dụng drush
, ví dụ:
drush -y cc all
trong đó sẽ xóa tất cả các bộ đệm Drupal (nhưng không phải tất cả các bộ đệm ). Trong Drupal 8 : drush cr
.
Một cách khác là viết một tập lệnh đơn giản sẽ cắt / xóa tất cả các bảng bắt đầu bằng cache_
, ví dụ như sử dụng một lớp lót sau:
echo "SHOW TABLES LIKE 'cache%'" | drush sqlc --extra=--skip-column-names | xargs -L1 -I% echo "DELETE FROM %;" | drush sqlc --extra=-v
TRUNCATE
các cache_views
bảng trong cơ sở dữ liệu.