Php 流浪汉;Symfony 3.3:删除目录失败

Php 流浪汉;Symfony 3.3:删除目录失败,php,symfony,vagrant,Php,Symfony,Vagrant,正在尝试使用Flex设置Symfony 3.3环境。当前,当尝试要求某些软件包时,如以下所示: composer req annotations security orm template asset validator 一切都进行得很顺利,除了缓存:清除我收到以下错误: !! [Symfony\Component\Filesystem\Exception\IOException] !! Failed to remove direc

正在尝试使用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/VirtualBox映射主机和来宾计算机之间共享文件夹的方式。在Symfony项目中,缓存目录通常位于从主机同步的项目目录中

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


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

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

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

这是许可问题吗?谁是缓存目录的所有者?我们有一个类似的问题。您正在使用NFS吗?另外,您在哪里运行
composer require
?直接在vm上还是在本地计算机上?@charj我正在vm上执行此操作。请尝试删除缓存目录内容(从本地计算机上,而不是从vagrant上)
rm-rf var/cache/*
在你的流浪机器上运行composer之前。你能运行php bin/console cache:clear--verbose并在这里发布堆栈跟踪吗?我会尽快进行测试。我像你说的那样做了,但我一直收到相同的错误,除了一个不同的文件夹…@Cláudio你使用了哪个文件夹?确保它不在VM同步目录内。我应该在VM内还是在VM外运行它,因为我使用的文件夹不在同步文件夹内。哦,伙计,这真是太棒了。谢谢你的努力。
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();
}