Изменение cache_dir и log_dir с помощью Symfony2
Из-за ограничений развертывания я хотел бы иметь каталоги журналов и кешей, используемые моим приложением Symfony2 где-то в /var/... в моей файловой системе. По этой причине я ищу способ настроить Symfony и переопределить местоположение по умолчанию для этих двух каталогов.
Я видел kernel.cache_dir и kernel.log_dir и читал класс Kernel.php. Из того, что я видел, я не думаю, что можно изменить настройки местоположения dir по конфигурации, и мне придется исправить класс Kernel.php.
Это правда, или есть способ добиться того, чего я хочу, без изменения кода рамки?
Ответы
Ответ 1
Добавьте следующие методы в app/AppKernel.php(AppKernel расширяет ядро), заставляя их возвращать предпочтительные пути:
public function getCacheDir()
{
return $this->rootDir . '/my_cache/' . $this->environment;
}
public function getLogDir()
{
return $this->rootDir . '/my_logs';
}
Ответ 2
Я был рад найти ваше сообщение, но я немного смутился от беспощадных ответов.
У меня такая же проблема и выяснилось, что журналы зависят от параметра конфигурации
kernel.logs_dir
.
Поэтому я просто добавил его к моим параметрам config.yml
:
kernel.logs_dir: /var/log/symfonyLogs
Я надеюсь, что это будет полезно для вас, даже если его поздний ответ.
Ответ 3
Я думаю, что самый простой способ - связать папку с другим местом. Мы сделали это на prod-сервере, но когда вы разрабатываете локальные, возможно, в Windows, это немного сложно установить символические ссылки.
ln -s /var/cache/ /var/www/project/app/cache
что-то вроде этого.
Ответ 4
Я хотел бы предложить альтернативу, то есть установить переменные среды для изменения этих каталогов. Таким образом, это легче установить в зависимости от стадии. (тестирование, производство или разработка)
export SYMFONY__KERNEL__CACHE_DIR "/your/directory/cache"
export SYMFONY__KERNEL__LOGS_DIR "/your/directory/logs"
Среда окружения также может быть установлена на виртуальном хосте с помощью SetEnv.
При чтении параметров ядра symfony будет искать все переменные $_SERVER, которые начинаются с SYMFONY__, отделяют первую часть и преобразуют все двойные подчеркивания в.
Исходный код
См. строку с 568 по 608
Ответ 5
В symfony вы можете переопределить каталог кеша (и журналов), расширив этот метод в AppKernel.
// app/appKernel.php
class AppKernel extends Kernel
{
// ...
public function getCacheDir()
{
return $this->rootDir.'/'.$this->environment.'/cache';
}
}
Отъезд http://symfony.com/doc/current/cookbook/configuration/override_dir_structure.html#override-cache-dir
Ответ 6
Я использовал конфигурационное решение от Dragnic, но я поместил пути в файл parameters.yml
, потому что этот файл игнорируется git. другими словами, он не синхронизируется с моего ПК в репозитории git, поэтому в среде prod
нет никакого воздействия.
# app/config/parameters.yml
parameters:
database_driver: pdo_mysql
[...]
kernel.cache_dir: "T:/project/cache"
kernel.logs_dir: "T:/project/logs"
Конфигурация: Windows7, WAMP 2.4 и Symfony 2.3.20.
Но вы должны знать, что:
Перезаписать параметр kernel.cache_dir
из вашего конфигурационного файла - очень плохая идея, а не поддерживаемый способ изменить папку кэша в Symfony.
Это ломает ситуацию, потому что теперь у вас будут разные папки кэша для ядра Kernel::getCacheDir()
и для параметра.
Источник: https://github.com/symfony/AsseticBundle/issues/370
Поэтому вы должны использовать его только в среде dev
, и если вы не хотите изменять содержимое файла app/AppKernel.php, в противном случае см. другие ответы.