Приложение Symfony записывает файлы конфигурации в каталог tmp

Я унаследовал старое приложение Symfony (Symfony 1.4) и мне пришлось перенести его на новый сервер. У меня нет опыта работы с Symfony, но миграция прошла хорошо, и все работает отлично, кроме одной вещи; администраторы нового сервера жалуются на то, что приложение каждую минуту записывает файлы в каталог / tmp:

Частичный пример вывода от администраторов:

-rw-------  1 www-data  www-data      17133 Dec 18 14:45 config_routing.yml.php4VSPbj
-rw-------  1 www-data  www-data      17133 Dec 18 14:47 config_routing.yml.php8ZZlxn
-rw-------  1 www-data  www-data      17133 Dec 18 14:38 config_routing.yml.php9NH03d
-rw-------  1 www-data  www-data      17133 Dec 18 14:38 config_routing.yml.phpGA9YrM
-rw-------  1 www-data  www-data      17133 Dec 18 14:45 config_routing.yml.phpO9fYz5
-rw-------  1 www-data  www-data      17133 Dec 18 14:47 config_routing.yml.phpOiXAYC
-rw-------  1 www-data  www-data      17133 Dec 18 14:43 config_routing.yml.phpptNyFw

а также эти файлы:

config_settings.yml.php, config_databases.yml.php, config_autoload.yml.php.

Я убедился, что отладка отключена в среде prod, но это все еще происходит. Кто-нибудь знает, что может быть причиной этого?

2

Решение

Кажется, каталог кеша приложений не существует, tempnam() функция используется sfConfigCache Затем класс по умолчанию использует системный временный каталог.

Расположение по умолчанию ./cache, создайте его и сделайте доступным для записи с помощью apache.

Чтобы понять, что происходит, отрывки из sfConfigCache учебный класс:

Строка 344: $tmpFile = tempnam(dirname($cache), basename($cache));
Здесь /tmp/config_routing.yml.php* файлы создаются для переименования или копирования несколькими строками позже:

if (!@rename($tmpFile, $cache))
{
if (copy($tmpFile, $cache))
{
unlink($tmpFile);
}
}

Очевидно, что переименовать и скопировать не удалось.

2

Другие решения

Symfony создает кэшированные версии конфигурационных файлов yml, поэтому нет необходимости пересматривать их при каждом запросе. Это происходит как в разработке, так и в производстве.

Самый простой способ предотвратить эти ошибки — включить разрешения на запись для пользователя www-данных Apache (или любого другого, под которым работает Apache). например.:

sudo chmod 775 /tmp

Кроме того, вы можете отключить кэширование в файле settings.yml, добавив / изменив следующие строки:

prod:
.settings:
cache: false

Это также может потребоваться сделать в файле конфигурации ваших приложений, если они переопределяют системные настройки по умолчанию. Например в файле apps/frontend/config/settings.yml

0

По вопросам рекламы [email protected]