我们有一个客户,想在节日期间关闭网站的数据库,还想让网站能够访问。这个需求在国内很常见。我们初步选定了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在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', ];
生成的静态文件存在了/data/8211/static/html目录下面。我们将端口指向到这个静态文件的目录,当前使用的apache,可以直接访问,运行良好。
将同样的目录,部署到nginx下面,使用Drupal的nginx配置,是出不来的。Tome生成静态文件夹,部署到nginx下面,采用这样的配置:
location / { try_files $uri $uri/ $uri/index.html; # For Tome static html files }
这样就可以跑起来了。
Superfish 的ID发生变化问题,由于整个整点,只用了一个,所以可以这样:
function mytheme_preprocess_superfish(array &$variables) { $variables['id'] = 'superfish-main'; }