Съхраняване на TYPO3 кеш файлове в AWS EFS

Имам приложение, изградено на TYPO3 CMS и хоствано на AWS. Архитектурата е такава:

  1. Група за автоматично мащабиране
  2. Балансьор на натоварването
  3. Две копия, хостващи приложението

понякога при отваряне на приложението имаме 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?

P.S: TYPO3 v6.2

Благодаря ти.


person Souad    schedule 19.07.2017    source източник
comment
Този код е доста добър пример за наистина безполезно скриване на изключения. Възникна грешка и те изглежда не си правят труда да уловят какво е... просто не работи.   -  person Michael - sqlbot    schedule 20.07.2017
comment
Ако гледам правилната линия... [158] while (($result = rename($temporaryCacheEntryPathAndFilename, $cacheEntryPathAndFilename)) === false && $i < 5) { $i++; } if ($result === false) { throw new ... ...хм, какво?   -  person Michael - sqlbot    schedule 20.07.2017
comment
@Michael-sqlbot така е, наистина е притеснително!!   -  person Souad    schedule 20.07.2017


Отговори (2)


Този отговор се отнася най-вече за конкретното кеширане на Fluid, но може да се използва и в други кешове, но не трябва да се използва в кешове като "cache_core", което е от съществено значение. Имате няколко опции:

  • Можете да маркирате конкретния кеш като „замразен“, което означава, че няма да бъдат разрешени нови записи. Ще бъде хвърлено изключение, ако се опитате да зададете в замразен кеш.
  • Можете да разпространявате конкретното местоположение на файловата система, съдържащо файловете (но трябва да внимавате да не разпространявате твърде много, тъй като това може да повлияе отрицателно на производителността на някои настройки за мащабиране).

Мисля, че искате втората опция тук, която позволява да се записват изтекли или нови записи в кеша на Fluid, но разпространява получените клас файлове, така че да могат да бъдат заредени на всеки от подчинените устройства.

Замразеният кеш е опция само ако сте в състояние да генерирате 100% предварително всички компилирани Fluid класове (което в зависимост от вашата настройка може дори да не е възможно при пълно обхождане на сайта).

За съжаление сте на TYPO3 6.2 - ако бяхте на v8, със сигурност бих препоръчал https://github.com/NamelessCoder/typo3-cms-fluid-precompiler-module като хубав начин да контролирате къде тези класове се компилират и съхраняват в кеш и прихващане на всички шаблони ( когато съществуват в стандартни пътища).

person Claus Due    schedule 19.07.2017

В записа за съхранение на файлове fileadmin можете да посочите пътя за временните файлове - и да използвате различно хранилище за файлове за тях.

Затова създайте ново файлово хранилище на AWS и задайте временната директория fileadmin на директория в това ново файлово хранилище. Вижте документацията на https://docs.typo3.org/typo3cms/FileAbstractionLayerReference/singlehtml/Index.html#processed-files

person cweiske    schedule 19.07.2017
comment
Можете ли да кажете къде е този файл? Имам fileadmin, но това е директория. - person Souad; 19.07.2017
comment
Къде е този запис за съхранение на файлове? - person Souad; 19.07.2017