2016-01-28 89 views
0

我是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的所有者/組設置爲www-data,這是Apache 2用戶。我爲該組設置了寫入權限。甚至在/var/cachebootstrap.php.cache上試過777。 它不會幫助。

當我刪除cache-dir時,通常由Symfony創建。 /var/cache/dev/prod也被創建並加載了dirs和文件。 我現在再也找不到bootstrap.php.cache了。

我該如何解決這個問題?

回答

0

如果您正在運行Centos Linux,默認情況下SELinux(/ etc/sysconfig/selinux)設置爲「enforcing」模式。這會阻止apache用戶或httpd進程寫入Symfony緩存和日誌路徑。大多數人通過設置爲「寬容」模式並重新啓動操作系統來輕鬆解決問題。

正確的做法是讓SELinux處於「強制執行」模式並使用policycoreutils-python更改某些權限。這些說明假定您已經按照Symfony2文檔使用了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