Php 在AWS EFS中存储TYPO3缓存文件

Php 在AWS EFS中存储TYPO3缓存文件,php,amazon-web-services,caching,amazon-ec2,typo3,Php,Amazon Web Services,Caching,Amazon Ec2,Typo3,我有一个基于TYPO3 CMS的应用程序,它的主机是AWS。架构如下所示: 自动缩放组 负载平衡器 托管应用程序的两个实例 有时在打开应用程序时,会出现PHP错误: The temporary cache file /var/www/htdocs/typo3temp/Cache/Code/fluid_template/file.tmp could not be written 异常是由文件FileBackEnd.PHP if ($result === false) { th

我有一个基于TYPO3 CMS的应用程序,它的主机是AWS。架构如下所示:

  • 自动缩放组
  • 负载平衡器
  • 托管应用程序的两个实例
  • 有时在打开应用程序时,会出现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);
       }
    
    文件的完整内容

    我猜这个错误的原因是,负载平衡器正在向没有生成文件的另一个实例发送流量我说得对吗

    为了解决这个错误,我考虑不将临时文件存储在实例的卷中,而是将它们存储在共享EFS上。 从技术上讲,这是可能的吗

    附言:TYPO3 v6.2


    谢谢。

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


    因此,创建一个新的AWS文件存储,并将
    fileadmin
    temp目录设置为该新文件存储中的一个目录。请参阅

    上的文档。此答案主要适用于特定的流体缓存,但也可用于其他缓存,但不应用于“cache_core”之类的缓存,这是必不可少的。您有两个选择:

    • 您可以将特定缓存标记为“冻结”,这意味着不允许新条目。如果尝试在冻结缓存中设置,将引发异常
    • 您可以分发包含文件的特定文件系统位置(但应注意不要分发太多,因为这可能会对某些扩展设置的性能产生负面影响)
    我认为您需要第二个选项,它允许写入过期或新的Fluid cache条目,但会分发生成的类文件,以便可以将它们加载到任何从机上

    只有当您能够100%预生成所有已编译的流体类时,冻结缓存才是一个选项(这取决于您的设置,甚至可能无法对站点进行完全爬网)


    不幸的是,您使用的是TYPO3 6.2-如果您使用的是v8,我肯定会建议您使用一种很好的方法来控制这些类在缓存中的编译和存储位置,并捕获所有模板(当它们存在于标准路径中时)。

    您能告诉我这个文件在哪里吗?我有fileadmin,但它是一个目录。那个文件存储“记录”在哪里?那个代码是一个非常好的例子,真的没有帮助。有一个错误发生了,他们似乎没有费心去捕捉它是什么。。。只是“没用”如果我看对了线
    [158]
    而($result=rename($temporaryCacheEntryPathAndFilename,$cacheEntryPathAndFilename))==false&&$i<5{$i++;}
    如果($result==false){抛出新的…
    …嗯,什么?@Michael sqlbot没错,真麻烦!!