drupal管理界面是否有休息api(例如清除缓存)

时间:2015-05-23 06:44:38

标签: php curl drupal drupal-7 drupal-modules

我使用基于云的持续集成将我的主题部署到我的drupal网站,我希望能够在主题文件复制到位后自动清除缓存。

有没有办法远程执行此操作?

我认为如果有一个休息api做这样的事情会很好,所以我可以这样做:

curl http://mysite.example.com/admin-api/clear-cache?key=<secret>

这可以通过脚本远程完成。我认为这是对匆忙的补充,这是一种远程溺水&#34;对于您没有ssh访问服务器但仍希望自动化的情况。

这是否有模块?还是其他一些策略?

1 个答案:

答案 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的模块正是您想要的。