流浪者& Symfony 3.3:无法删除目录

时间:2017-11-12 17:46:09

标签: php symfony vagrant

尝试使用Flex设置Symfony 3.3环境。目前,当尝试要求一些包如下所示:

composer req annotations security orm template asset validator

一切顺利,除了缓存:清楚我收到以下错误:

!!    [Symfony\Component\Filesystem\Exception\IOException]                         
!!    Failed to remove directory "/home/vagrant/Code/multi-user-gallery-blog/var/  
!!    cache/loca~/pools": rmdir(/home/vagrant/Code/multi-user-gallery-blog/var/ca  
!!    che/loca~/pools): Directory not empty. 

我已经尝试手动删除文件夹,但这些文件夹是在安装过程中自动生成的,然后Symfony无法删除它们。

我在Vagrant Homestead上运行。

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:5)

这是an issue,其中Vagrant / VirtualBox映射主机和客户机之间的共享文件夹。在Symfony项目中,缓存目录通常放在从主机同步的项目目录中。

我们可以change the cache directory使用来宾计算机文件系统中的位置,通过向 app / AppKernel.php 类添加覆盖方法来避免这些问题:

class AppKernel extends Kernel 
{
    ...
    public function getCacheDir() 
    {
        if ($this->environment === 'local') {
            return '/tmp/symfony/cache';
        }

        return parent::getCacheDir();
    }
}

上面的示例演示了如何为本地开发环境设置自定义缓存目录,同时保留生产的默认行为。 / tmp / symfony / cache 只是一个例子。我们可以在客户机的文件系统中的任何位置选择应用程序有权写入的位置。将'local'替换为项目用于开发的环境名称。

答案 1 :(得分:0)

请参阅我对已接受答案的评论,以下是代码:

public function getCacheDir()
{
    if (in_array($this->environment, ['dev', 'test'])) {
        return '/tmp/cache/' .  $this->environment;
    }

    return parent::getCacheDir();
}

public function getLogDir()
{
    if (in_array($this->environment, ['dev', 'test'])) {
        return '/var/log/symfony/logs';
    }

    return parent::getLogDir();
}