我是Symfony和Composer的新手。
我最近安装了Symfony 3和安装程序(在Linux上),正如解释的那样。之后我还安装了Composer。
当我尝试使用 Composer 运行更新时,它会出现如下错误:
post-update-cmd: SensioBundleDistributionBundleComposerScriptHandler::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 SensioBundleDistributionBundleComposerScriptHandler::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 SensioBundleDistributionBundleComposerScriptHandler::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/cache
和bootstrap.php.cache
上尝试了 777.这无济于事。
当我删除cache-dir
时,它是由Symfony正常创建的。 还会创建/var/cache/dev
和/prod
并加载目录和文件。我现在找不到bootstrap.php.cache
了。
我该如何解决这个问题?
如果你运行的是 Centos Linux,默认情况下 SELinux (/etc/sysconfig/selinux) 被设置为"enforcecing"模式。这将阻止 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