在AWS EFS中存储TYPO3缓存文件

时间:2017-07-19 08:40:18

标签: php amazon-web-services caching amazon-ec2 typo3

我有一个基于TYPO3 CMS的应用程序,它在AWS上托管。架构是这样的:

  1. 自动缩放组
  2. 负载均衡器
  3. 托管应用程序的两个实例
  4. 有时在打开应用程序时,我们遇到PHP错误:

    The temporary cache file /var/www/htdocs/typo3temp/Cache/Code/fluid_template/file.tmp could not be written
    

    异常由文件FileBackEnd.PHP

    生成
       if ($result === false) {
           throw new \TYPO3\CMS\Core\Cache\Exception('The cache file "' . $cacheEntryPathAndFilename . '" could not be written.', 1222361632);
       }
    

    文件HERE的完整内容。

    我猜这个错误的原因是因为负载均衡器正在将流量发送到未生成文件的其他实例。 AM我是对的

    要解决此错误,我想的不是将临时文件存储在实例的卷中,而是将它们存储在共享的EFS上。 从技术上讲,TYPO3是否明智,可能

    P.S:TYPO3 v6.2

    谢谢。

2 个答案:

答案 0 :(得分:0)

fileadmin文件存储记录中,您可以指定临时文件的路径 - 并为它们使用不同的文件存储。

因此,创建一个新的AWS文件存储,并将fileadmin临时目录设置为该新文件存储中的目录。请参阅https://docs.typo3.org/typo3cms/FileAbstractionLayerReference/singlehtml/Index.html#processed-files

上的文档

答案 1 :(得分:0)

这个答案主要适用于特定的Fluid缓存,但也可以用于其他缓存,但不应该用于像" cache_core"这样的缓存。这是至关重要的。你有几个选择:

  • 您可以标记特定缓存"冻结"这意味着不允许任何新条目。如果尝试设置冻结缓存,则会抛出异常。
  • 您可以分发包含文件的特定文件系统位置(但是请注意不要分发太多,因为这会对某些缩放设置的性能产生负面影响)。

我想你想要第二个选项,它允许写入过期或新的Fluid高速缓存条目,但是分发结果类文件,以便它们可以加载到任何从属文件上。

如果您能够100%预先生成所有已编译的Fluid类(根据您的设置,甚至可能无法对网站进行完全爬网),冻结缓存只是一个选项。

不幸的是你在TYPO3 6.2上 - 如果你在v8上我肯定会推荐https://github.com/NamelessCoder/typo3-cms-fluid-precompiler-module作为控制的好方法这些类被编译并存储在缓存中,并且捕获所有模板(当它们存在于标准路径中时)。