Изменение cache_dir и log_dir с помощью Symfony2 - PullRequest
13 голосов
/ 09 сентября 2011

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

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

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

Ответы [ 7 ]

18 голосов
/ 29 ноября 2011

Добавьте следующие методы в app / AppKernel.php (AppKernel расширяет ядро), заставляя их возвращать предпочитаемые пути:

public function getCacheDir()
{
    return $this->rootDir . '/my_cache/' . $this->environment;
}

public function getLogDir()
{
    return $this->rootDir . '/my_logs';
}
8 голосов
/ 05 января 2012

Я был рад найти ваш пост, но меня немного смутили бесполезные ответы.

Я получил ту же проблему и обнаружил, что журналы зависят от параметра конфигурации kernel.logs_dir.

Поэтому я просто добавил его к своим config.yml параметрам:

kernel.logs_dir: /var/log/symfonyLogs

Надеюсь, это поможет вам, даже если ответ будет запоздалым.

6 голосов
/ 09 сентября 2011

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

ln -s /var/cache/ /var/www/project/app/cache

как-то так.

3 голосов
/ 15 июня 2015

Я хотел бы предложить альтернативу - установить переменные окружения для изменения этих каталогов. Этот способ легче установить в зависимости от сцены. (тестирование, производство или разработка)

export SYMFONY__KERNEL__CACHE_DIR "/your/directory/cache"
export SYMFONY__KERNEL__LOGS_DIR "/your/directory/logs"

Переменные среды также могут быть установлены на виртуальном хосте с помощью SetEnv. При чтении параметров ядра symfony будет искать все переменные $ _SERVER, которые начинаются с SYMFONY__, вырезать первую часть и преобразовать все двойные подчеркивания в.

Исходный код

См. Строки с 568 по 608

1 голос
/ 30 сентября 2014

В 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

0 голосов
/ 14 апреля 2018

Нет принятого ответа, и действительно старый вопрос, но я нашел его с помощью Google, поэтому я публикую здесь более свежий способ изменить каталог кэша и каталог журналов ( источник здесь )

  • запомните, короткий синтаксис для массивов требует php 5.4
  • Вы можете выбрать env для изменения и управлять различными каталогами кэша и журналов, если хотите

    public function getCacheDir()
    {
        if (in_array($this->environment, ['prod', 'test'])) {
        return '/tmp/cache/' .  $this->environment;
    }
    
    return parent::getCacheDir();
    }
    
    public function getLogDir()
    {
        if (in_array($this->environment, ['prod', 'test'])) {
        return '/var/log/symfony/logs';
    }
    
    return parent::getLogDir();
    }
    
0 голосов
/ 24 октября 2014

Я использовал решение по конфигурации из 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 , в противном случае смотрите другие ответы.

...