在vagrant上使用/ dev / shm - PERMISSION ERROR / MacOSX

时间:2014-11-12 13:27:22

标签: php symfony caching vagrant shared-memory

我正在使用Vagrant在我的MacOSX上使用Linux Ubuntu环境进行开发。

使用Symfony2。数据库和编码一切都很好。

当我尝试清除缓存并安装资产时,它看起来已经完成但我无法使用任何缓存我认为因为我的资产没有改变。

所以,我试图将缓存目录更改为/dev/shm

刷新我的页面并查看该目录以查看创建的任何目录,我看到www-data用户和组成功创建了目录。所以php-fpm必须创建该目录,所以它有效吗?

我曾尝试再次生成资产,但我收到了权限错误...

查询缓存目录:

public function getCacheDir()
{
    if (in_array($this->environment, array('dev', 'test'))) {
        return '/dev/shm/appname/cache/' .  $this->environment;
    }

    return parent::getCacheDir();
}

public function getLogDir()
{
    if (in_array($this->environment, array('dev', 'test'))) {
        return '/dev/shm/appname/logs';
    }

    return parent::getLogDir();
}

我的情景:

文件由www-data创建。当我尝试在控制台(终端)上安装资产时;

php app/console assets:install web --symlink

php-cli或php-cgi与其他用户合作,不允许修改该文件。

我该怎么办?我被卡住了!

1 个答案:

答案 0 :(得分:1)

我尝试用Ubuntu主机做同样的事情。最后我最后做的是创建app / cache作为/ run / shm / sf-cache的目录链接。

这是我在配置期间运行的设置bash脚本....

# create the cache path
sudo mkdir -p /run/shm/sf-cache/
sudo chmod 777 /run/shm/sf-cache

# Copy over the rest of the files (from /vagrant to /var/www/sf-project/)
/vagrant/provision/resync_files.sh

# Setup the log folder
sudo chmod 777 /var/www/sf-project/app/logs

cd /var/www/sf-project

# Link the Cache folder to the folder in the ram drive.
sudo ln -s /run/shm/sf-cache/ app/cache

但你会发现唯一的方法(至少对我而言)是在/ var / www /中创建一个驻留在/ vagrant中的文件的副本,因为/ var / www在本地文件系统上, / vagrant不是,它在主机上。

使用PHPStorm不是问题,因为我只是通过samba共享/ var / www / sf-project文件夹,然后将其映射为文件夹。在我的ubuntu主机上(我正在从Windows迁移到Ubuntu),我挂载samba共享,然后创建一个指向挂载点的目录链接,然后在PHPStorm中设置部署服务器将其部署到本地文件夹因为它是samba共享,所以直接将它复制到/ var / www / sf-project文件夹中。

如果您不使用PHPStorm,我感谢您的更多工作,但这就是我解决该特定问题的方式。我发现这比尝试移动缓存文件夹更容易,我们增加了复杂性,并非每个开发人员都使用Vagrant框,所以我不能简单地更改代码而不破坏他们的系统。