我使用基于云的持续集成将我的主题部署到我的drupal网站,我希望能够在主题文件复制到位后自动清除缓存。
有没有办法远程执行此操作?
我认为如果有一个休息api做这样的事情会很好,所以我可以这样做:
curl http://mysite.example.com/admin-api/clear-cache?key=<secret>
这可以通过脚本远程完成。我认为这是对匆忙的补充,这是一种远程溺水&#34;对于您没有ssh访问服务器但仍希望自动化的情况。
这是否有模块?还是其他一些策略?
答案 0 :(得分:3)
你可以写一个挂在cron上的小模块:
// function that will be triggered on next cron run
function <MODULE>_cron() {
// clear all caches
drupal_flush_all_caches();
}
然后你可以简单地运行cron:
curl http://mysite.example.com/cron.php?cron_key=<YOUR_CRON_KEY>
反过来会触发清除缓存的<MODULE>_cron()
。
另一种方法是创建一个小模块,通过hook_menu()
添加回调:
function <MODULE>_menu() {
$menu['cache/clear/%'] = array(
'page callback' => '<MODULE>_clear_cache',
'access arguments' => array('access content'),
'page arguments' => array(2)
);
return $menu;
}
function <MODULE>_clear_cache($cache) {
// check so we have a valid access_token
$access_token = variable_get('cache_access_token');
$token = filter_input(INPUT_GET, 'access_token');
if($token == $access_token) {
switch($cache) {
case 'all':
drupal_flush_all_caches();
break;
case 'theme':
cache_clear_all('theme_registry', 'cache', TRUE);
break;
}
}
}
function <MODULE>_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'system_site_information_settings') {
// add a cache access token field under site information
$form['cache_access_token'] = array(
'#type' => 'textfield',
'#title' => t('Access Token'),
'#description' => t('Token used to access clear cache remotely'),
'#default_value' => variable_get('cache_access_token')
);
}
}
启用模块,您应该可以通过运行以下命令清除缓存:
curl http://mysite.example.com/cache/clear/all?access_token=<YOUR_ACCESS_TOKEN>
如果你只想清除主题缓存,你会这样做:
curl http://mysite.example.com/cache/clear/theme?access_token=<YOUR_ACCESS_TOKEN>
我认为还有一个名为Clear Cache Remotely
的模块正是您想要的。