63

私は使用しなければなりませんでした

app/console cache:clear  command

エンティティを生成するときに問題を解決するため。

ホームページを読み込めなくなりました:

  http://localhost/projet_etienne/web/app_dev.php

それは言う:

RuntimeException:キャッシュファイル「/var/www/projet_etienne/app/cache/dev/classes.php」の書き込みに失敗しました。

このキャッシュビジネスについてはよくわかりません。

私のフォルダapp/cacheには、、、、フォルダがあります。それは正常ですか?devdev_newdev_old

the

app/console cache:clear

ちなみに生成します:

[ErrorException]警告:rename(/ var / www / projet_etienne / app / cache / dev、/ var / www / projet_etien
ne / app / cache / dev_old):/ var / www / projet_etienne / vendo
r/symfonyのディレクトリが空ではありません/symfony/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php
行77

助けてください!

4

10 に答える 10

102

優れた明確な解決策については、Setting up Permissionsセクション のセクションを参照してくださいInstalling and Configuring Symfony

権限の設定

Symfonyをインストールする際の一般的な問題の1つは、app/cacheディレクトリとapp/logsディレクトリがWebサーバーとコマンドラインユーザーの両方で書き込み可能でなければならないことです。UNIXシステムでは、Webサーバーユーザーがコマンドラインユーザーと異なる場合は、次のいずれかの解決策を試すことができます。

  1. CLIとWebサーバーに同じユーザーを使用する

開発環境では、CLIとWebサーバーに同じUNIXユーザーを使用するのが一般的な方法です。これにより、新しいプロジェクトを設定するときにこれらのアクセス許可の問題が回避されるためです。これは、Webサーバー構成(通常、Apacheの場合はhttpd.confまたはapache2.conf)を編集し、そのユーザーをCLIユーザーと同じになるように設定する(たとえば、Apacheの場合は、ユーザーとグループの値を更新する)ことで実行できます。

  1. 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
  1. 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オプションを追加してみてください。

  1. 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」の書き込みに失敗しました

于 2013-02-25T15:17:36.797 に答える
26

ほとんどの場合、ディレクトリやサブディレクトリが書き込み可能ではないことを意味します。多くの人がサブディレクトリを忘れています。

Symfony 2

chmod -R 777 app/cache app/logs

symfony3のディレクトリ構造

chmod -R 777 var/cache var/logs

追加リソース

Symfonyによるパーミッションソリューション(前述)。

KPN大学によるパーミッションソリューション-インストール時のスクリーンキャストが追加で含まれています。

注:Symfony 3のディレクトリ構造を使用している場合は、app/cacheandapp/logsvar/cacheandに置き換えてvar/logsください。

于 2014-06-17T19:20:34.373 に答える
16

フォルダがすでに書き込み可能である場合、それは問題ではありません。

/www/projet_etienne/app/cache/そこにあるフォルダ(dev、dev_new、dev_old)に移動して、手動で削除することもできます。

問題が解決しない場合は、これらのフォルダのコピーをどこかに保存して元に戻してください。

私はこれが行われるべき方法ではないことを知っていますが、それは今私のために数回うまくいきました。

于 2012-11-03T20:59:42.647 に答える
13

おそらく途中でclearcacheを中止し、すでにapp / cache/dev_oldがあります。

これを試してください(OS XやLinuxなどのUnix環境を使用していると仮定して、プロジェクトのルートで):

rm -rf app/cache/dev*

于 2012-11-14T10:29:12.477 に答える
9

たぶんあなたはアプリ/キャッシュアプ​​リ/ログの権限を変更するのを忘れました

私はUbuntuを使用しているので

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
sudo setfacl -dR -m u::rwX app/cache app/logs

それが役に立てば幸い..

于 2014-08-03T07:32:29.477 に答える
2

ディレクトリ全体をWindowsインストールからunix本番サーバーに移動しましたが、同じエラーが発生しました。それを修正するために、私はUNIXでこれらの2行を実行しただけで、すべてが正常に実行され始めました

rm -rf app/cache/*
rm -rf app/logs/*
于 2014-02-10T19:53:14.863 に答える
1

私は実行しました:

ps aux | grep apache

そしてそのようなものを手に入れました:

root     28147  0.0  5.4 326336 27024 ?        Ss   20:06   0:00 /usr/sbin/apache2 -k start
www-data 28150  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28151  0.0  4.4 329016 22124 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28152  0.1  6.0 331252 30092 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28153  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28154  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28157  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
user     28297  0.0  0.1  15736   924 pts/4    S+   20:12   0:00 grep --color=auto apache

したがって、アクセス権のないユーザーは、www-data次のコマンドを実行したことがわかりました。

sudo chown -R www-data app/cache
sudo chown -R www-data app/logs

そしてそれはアクセスエラーを解決しました。

特定のアクセスの問題を解決するために、安全でない777を使用しないでください。

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
于 2017-01-25T17:20:35.743 に答える
1

symfonyバージョンが2.8未満の場合

sudo chmod -R 777 app/cache/*

symfonyバージョンが3.0以上の場合

sudo chmod -R 777 var/cache/*

于 2018-06-05T14:15:30.867 に答える
0

このaclcmdを使用するだけで、次にvar内のファイルが作成されたときに、www-dataユーザーに対するr / w/x権限が付与されます。

cd var 
rm -rf *
cd ..
setfacl -d -m u:www-data:rwx var

Cmdの説明:

setfacl -> Set acl command    
-d -> default behavior    
-m -> modify 
u:www-data: -> for user 
rwx -> adding permissions  
var -> on the folder
于 2019-08-08T10:52:23.350 に答える
0

docker(私のSymfonyバージョン5.1)でSymfonyプロジェクトを起動したときにこのエラーが発生した場合。または次のようなエラー:

キャッチされない例外:アップストリームの読み取り中にファイル"/var/www/html/mysite.com.local/var/cache/dev/App_KernelDevDebugContainer.xml""の書き込みに失敗しました

キャッチされない警告:file_put_contents(/var/www/html/mysite.com.local/var/cache/dev/App_KernelDevDebugContainerDeprecations.log):ストリームを開くことができませんでした:アップストリームの読み取り中に「アクセスが拒否されました」

以下の修正は私を助けました。

nginxコンテナのDockerfileに次の行を追加します。

RUN usermod -u 1000 www-data

Dockerfile for php-fpm containerに次の行を追加します:

RUN usermod -u 1000 www-data

次に、ディレクトリ「/ var / cache」、「/ var / log」内のすべてを削除し、dockerのコンテナを再構築します。

于 2020-10-19T15:22:26.183 に答える