You are here

使用Tome模块给Drupal站点实现动静分离

我们有一个客户,想在节日期间关闭网站的数据库,还想让网站能够访问。这个需求在国内很常见。我们初步选定了Tome模块。

Tome模块简介

Tome模块是Drupal站点生成静态站的利器,只需要Drupal就能生成静态站点,生成的效果和动态站点几乎一样,对于views,多媒体的支持也很友好。将站点静态化,可以极大的提高站点的性能和安全性。Tome的原理和早先的Boost模块一样,就是发起http请求,将动态生成的页面保存到指定的本地文件目录里面。


项目地址:https://www.drupal.org/project/tome 


这是我们在实际使用中的总结:

首先尝试了Tome模块,总是报错,我检查了一下,网站升级不彻底,重新帮助客户升级到Dupal最新版本,再安装Tome模块。


个别模块冲突

在后台生成静态页面的时候,总是报错。我们研究一下,增加了日志输出。检查到了几个出错的页面:

namespace Drupal\tome_static\Form;
StaticGeneratorForm
 
\Drupal::logger('tome')->notice('path:'.$path);
      
       ///  path:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD…
       // png
       if(substr($path,0,11) == 'data:image/'){
         return;
       }
       //可以在settings.php里面配置
 
       $exclude_paths = [
         '/wechat',
         '/en/wechat',
        
       ];
       if(in_array($path, $exclude_paths)){
                return;
       }

   发现写的wechat模块提供的路径,匿名用户下,在tome下面报错,就把它排除出去了,还有以data:image/开头的奇怪路径也被我排除掉了。

   这样批处理就可以正常运行。成功生成了静态页面。

  tome配置

   这是后面我们的tome在settings.php里面的配置:

$settings['tome_files_directory'] = '/data/8211/static/files';
$settings['tome_content_directory'] = '/data/8211/static/content';
$settings['tome_static_directory'] = '/data/8211/static/html';
$settings['tome_static_path_exclude'] = [
  '/wechat',
  '/en/wechat',
];

 

Apache、Nginx配置

生成的静态文件存在了/data/8211/static/html目录下面。我们将端口指向到这个静态文件的目录,当前使用的apache,可以直接访问,运行良好。

 

将同样的目录,部署到nginx下面,使用Drupal的nginx配置,是出不来的。Tome生成静态文件夹,部署到nginx下面,采用这样的配置:

    location / {
         try_files $uri $uri/ $uri/index.html; # For Tome static html files
    }

这样就可以跑起来了。

   

 Superfish异常处理

Superfish 的ID发生变化问题,由于整个整点,只用了一个,所以可以这样:

function mytheme_preprocess_superfish(array &$variables) {
  $variables['id'] = 'superfish-main';
}


Drupal版本: