使用 Symfony2 更改 cache_dir 和 log_dir
Posted
技术标签:
【中文标题】使用 Symfony2 更改 cache_dir 和 log_dir【英文标题】:Changing cache_dir and log_dir with Symfony2 【发布时间】:2011-11-13 12:02:00 【问题描述】:由于部署限制,我希望我的 Symfony2 应用程序使用的日志和缓存目录位于我的文件系统中 /var/... 下的某个位置。出于这个原因,我正在寻找一种方法来配置 Symfony 并覆盖这两个目录的默认位置。
我看过 kernel.cache_dir 和 kernel.log_dir 并阅读了 Kernel.php 类。从我所见,我认为不可能通过配置更改目录位置,我必须修补 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
类似的东西。
【讨论】:
我用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 行
【讨论】:
这是deprecated,自 3.3 版起【参考方案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文件的内容,否则请参阅其他答案。
【讨论】:
警告 => 坏主意!!!特别是如果您使用 Assetic:github.com/symfony/AsseticBundle/issues/370 @Oliboy50:谢谢,我更新了答案以警告用户。【参考方案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();
【讨论】:
以上是关于使用 Symfony2 更改 cache_dir 和 log_dir的主要内容,如果未能解决你的问题,请参考以下文章
Payum Bundle:如何在 symfony2 中更改捕获操作的视图