【问题标题】:Changing cache_dir and log_dir with Symfony2使用 Symfony2 更改 cache_dir 和 log_dir
【发布时间】:2011-11-13 12:02:00
【问题描述】:

由于部署限制,我希望我的 Symfony2 应用程序使用的日志和缓存目录位于我的文件系统中 /var/... 下的某个位置。出于这个原因,我正在寻找一种方法来配置 Symfony 并覆盖这两个目录的默认位置。

我看过 kernel.cache_dir 和 kernel.log_dir 并阅读了 Kernel.php 类。从我所见,我认为不可能通过配置更改目录位置,我必须修补 Kernel.php 类。

这是真的吗,或者有没有办法在不修改框架代码的情况下实现我想要的?

【问题讨论】:

    标签: caching logging symfony configuration


    【解决方案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
        

        类似的东西。

        【讨论】:

        • 我用ln -snf 很容易地解决了很多问题(比如Assetic 中的愚蠢错误),这是要走的路。
        【解决方案4】:

        我想提供一个替代方案,那就是设置环境变量来更改这些目录。这种方式更容易根据舞台进行设置。 (测试、生产或开发)

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

        环境变量也可以用SetEnv在虚拟主机中设置。 在读取内核参数时,symfony 会查找所有以 SYMFONY__ 开头的 $_SERVER 变量,去掉第一部分并将所有双下划线转换为 .

        Source code

        见第 568 至 608 行

        【讨论】:

        【解决方案5】:

        在 symfony 中,您可以通过扩展 AppKernel 中的方法来覆盖缓存(和日志)目录。

        // 应用程序/appKernel.php 类 AppKernel 扩展内核 { // ... 公共函数 getCacheDir() { return $this->rootDir.'/'.$this->environment.'/cache'; } }

        查看http://symfony.com/doc/current/cookbook/configuration/override_dir_structure.html#override-cache-dir

        【讨论】:

          【解决方案6】:

          我使用了configuration solution from Dragnic,但我将路径放在了parameters.yml 文件中,因为这个文件被git忽略了。换句话说,它没有从我的 PC 同步到 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文件的内容,否则请参阅其他答案。

          【讨论】:

          【解决方案7】:

          没有接受的答案,而且是一个非常老的问题,但我在 google 上找到了它,所以我在这里发布了一种更新缓存目录和日志目录的方法,(source here)

          • remember, short syntax for arrays require php 5.4
          • 您可以选择要修改的环境,并根据需要管理不同的缓存和日志目录

            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();
            }
            

          【讨论】:

            猜你喜欢
            • 2012-10-30
            • 1970-01-01
            • 2023-03-29
            • 2013-12-31
            • 1970-01-01
            • 2016-07-06
            • 2012-08-15
            • 2013-11-13
            • 1970-01-01
            相关资源
            最近更新 更多