Làm thế nào để xóa bộ nhớ cache bên ngoài?


6

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:


7

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');

Vì nó là một tập lệnh không phải Drupal, nên có lẽ tôi sẽ làm như vậy và bao gồm () các tệp cần thiết. Cảm ơn!
Daniel Holm

10

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 có vẻ như là giải pháp rõ ràng ở đây, mặc dù OP muốn xóa bộ đệm Views. Hãy thử drush cc viewstrong 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.
Citricguy

Vâng, bạn đúng về 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.
greg_1_anderson

Thật không may, tôi không có loại quyền truy cập đó trên máy chủ này. Nếu không thì tôi thực sự rất thích Drush!
Daniel Holm

6

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 drushxóa bộ nhớ cache với nódrush cc all

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

5
Đảm bảo kiểm tra quyền truy cập, liên tục gọi url đó có thể dễ dàng đưa trang web của bạn xuống
Berdir

@Berdir, vâng, tôi đồng ý với bạn, đây chỉ là một cách có thể lấy ý tưởng và phát triển nó.
Yuseferi

Kịch bản nằm ngoài mã Drupal thực tế. Điều này sẽ là hoàn hảo cho mô-đun của tôi, nhưng không phải trong trường hợp chính xác này. Nhưng cảm ơn!
Daniel Holm

Một cuộc gọi lại như thế này sẽ kiểm tra một số mã thông báo bí mật và lý tưởng là mã thông báo chống csrf để tránh lạm dụng.
chào đón

@greggles có Tôi đồng ý với bạn hoặc gọi lại truy cập được chỉ định;)
Yuseferi

0

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 cctrong 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 .


0

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 

-2

TRUNCATEcác cache_viewsbảng trong cơ sở dữ liệu.


Lấy làm tiếc. Không đọc đủ cẩn thận.
Gaelan

Không sao cả. Nhưng vâng, tôi không muốn nó như vậy, mà là sử dụng chức năng Drupal "an toàn".
Daniel Holm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.