Подтвердить что ты не робот

Изменение cache_dir и log_dir с помощью Symfony2

Из-за ограничений развертывания я хотел бы иметь каталоги журналов и кешей, используемые моим приложением Symfony2 где-то в /var/... в моей файловой системе. По этой причине я ищу способ настроить Symfony и переопределить местоположение по умолчанию для этих двух каталогов.

Я видел kernel.cache_dir и kernel.log_dir и читал класс Kernel.php. Из того, что я видел, я не думаю, что можно изменить настройки местоположения dir по конфигурации, и мне придется исправить класс Kernel.php.

Это правда, или есть способ добиться того, чего я хочу, без изменения кода рамки?

4b9b3361

Ответ 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

Ответ 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, в противном случае см. другие ответы.