Хранение файлов кэша 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?

PS: 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 — если бы вы работали на версии 8, я бы определенно рекомендовал 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