Я унаследовал старое приложение 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, но это все еще происходит. Кто-нибудь знает, что может быть причиной этого?
Кажется, каталог кеша приложений не существует, 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);
}
}
Очевидно, что переименовать и скопировать не удалось.
Symfony создает кэшированные версии конфигурационных файлов yml, поэтому нет необходимости пересматривать их при каждом запросе. Это происходит как в разработке, так и в производстве.
Самый простой способ предотвратить эти ошибки — включить разрешения на запись для пользователя www-данных Apache (или любого другого, под которым работает Apache). например.:
sudo chmod 775 /tmp
Кроме того, вы можете отключить кэширование в файле settings.yml, добавив / изменив следующие строки:
prod:
.settings:
cache: false
Это также может потребоваться сделать в файле конфигурации ваших приложений, если они переопределяют системные настройки по умолчанию. Например в файле apps/frontend/config/settings.yml