Composer:无法写入缓存文件

时间:2016-01-28 19:41:24

标签: caching composer-php file-permissions symfony

我是Symfony和Composer的新手。

我最近安装了Symfony 3和the installer(在Linux上),正如所解释的那样。 之后我也installed Composer

当我尝试运行an update with Composer时,会出现以下错误:

post-update-cmd: Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap
PHP Fatal error:  Uncaught exception 'RuntimeException' with message 'Failed to write cache  
file "/home/dev/var/bootstrap.php.cache".' in 
/home/dev/vendor/symfony/symfony/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php:236

[RuntimeException]                            
Unable to write in the cache directory (/home/dev/var/cache/dev)  

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the  
post-install-cmd event terminated with an exception

[RuntimeException]
An error occurred when executing the "'cache:clear --no-warmup'" command:
[RuntimeException]            
Unable to write in the cache directory (/home/dev/var/cache/dev) 

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap handling the 
post-install-cmd event terminated with an exception
[RuntimeException]                                     
An error occurred when generating the bootstrap file.  

我发现了一些问题,但它们已经陈旧,似乎有一个特定的原因。我无法弄清楚出了什么问题。

我将/var的所有者/组设置为{2}用户www-data。我为该组设置了写权限。甚至在/var/cachebootstrap.php.cache上尝试了777。 它没有帮助。

当我删除cache-dir时,它是由Symfony正常创建的。 /var/cache/dev/prod也会被创建并加载dirs和文件。 我现在不能再找到bootstrap.php.cache了。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

再看后再搜索。我发现它与linux权限有关。感谢this question

仍在以正确的方式确定如何以setup the permissions为Symfony。

答案 1 :(得分:0)

如果您运行的是Centos Linux,默认情况下SELinux(/ etc / sysconfig / selinux)设置为"强制执行"模式。这将阻止apache用户或httpd进程写入Symfony缓存和日志路径。大多数人通过设置" permissive"来解决问题。模式并重新启动操作系统。

正确的方法是让SELinux进入"强制执行"模式并使用policycoreutils-python来更改某些权限。这些说明假定您已根据Symfony2 docs使用了setfacl。

sudo yum install policycoreutils-python
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_enable_cgi 1
sudo setsebool -P httpd_builtin_scripting 1
sudo setsebool -P httpd_unified 1
sudo setsebool -P httpd_read_user_content true
sudo setsebool allow_httpd_anon_write true
sudo setsebool -P httpd_can_network_connect_db 1
sudo restorecon -rv /var/www