優れた明確な解決策については、Setting up Permissions
セクション のセクションを参照してくださいInstalling and Configuring Symfony
。
権限の設定
Symfonyをインストールする際の一般的な問題の1つは、app/cacheディレクトリとapp/logsディレクトリがWebサーバーとコマンドラインユーザーの両方で書き込み可能でなければならないことです。UNIXシステムでは、Webサーバーユーザーがコマンドラインユーザーと異なる場合は、次のいずれかの解決策を試すことができます。
- CLIとWebサーバーに同じユーザーを使用する
開発環境では、CLIとWebサーバーに同じUNIXユーザーを使用するのが一般的な方法です。これにより、新しいプロジェクトを設定するときにこれらのアクセス許可の問題が回避されるためです。これは、Webサーバー構成(通常、Apacheの場合はhttpd.confまたはapache2.conf)を編集し、そのユーザーをCLIユーザーと同じになるように設定する(たとえば、Apacheの場合は、ユーザーとグループの値を更新する)ことで実行できます。
- chmod+aをサポートするシステムでのACLの使用
多くのシステムでは、chmod+aコマンドを使用できます。最初にこれを試してください。エラーが発生した場合は、次の方法を試してください。これは、コマンドを使用してWebサーバーユーザーを特定し、HTTPDUSERとして設定しようとします。
$ rm -rf app/cache/*
$ rm -rf app/logs/*
$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`
$ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
- chmod+aをサポートしていないシステムでのACLの使用
一部のシステムはchmod+aをサポートしていませんが、setfaclと呼ばれる別のユーティリティをサポートしています。パーティションでACLサポートを有効にし、使用する前にsetfaclをインストールする必要がある場合があります(Ubuntuの場合と同様)。これは、コマンドを使用してWebサーバーユーザーを特定し、HTTPDUSERとして設定しようとします。
$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
Symfony3の場合は次のようになります。
$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var/cache var/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var/cache var/logs
これが機能しない場合は、-nオプションを追加してみてください。
- ACLを使用しない
上記の方法のいずれも機能しない場合は、キャッシュディレクトリとログディレクトリがグループ書き込み可能またはワールド書き込み可能になるようにumaskを変更します(Webサーバーユーザーとコマンドラインユーザーが同じグループにあるかどうかによって異なります)。これを実現するには、app / console、web / app.php、およびweb/app_dev.phpファイルの先頭に次の行を配置します。
umask(0002); // This will let the permissions be 0775
// or
umask(0000); // This will let the permissions be 0777
umaskの変更はスレッドセーフではないため、サーバー上でACLにアクセスできる場合は、ACLを使用することをお勧めします。
http://symfony.com/doc/current/book/installation.html#checking-symfony-application-configuration-and-setup
ソース:
キャッシュをクリアするときにキャッシュファイル「/var/www/myapp/app/cache/dev/classes.php」の書き込みに失敗しました