Cache

Cache(キャッシュ)と言っても現金の事ではありません(そちらはcash。cacheは元々「隠し場所」等の意味を持つ単語です)。

Symfonyでは処理速度の高速化のため、一時ファイルを生成して特定の領域に置きます。しかし、そのために色々と問題が起きる事があります。

Symfonyのプロジェクトディレクトリは大抵の場合一般ユーザで作成します。そしてそれは「webサーバを動作させているユーザと異なる」場合が殆どです。

この時に何が起きるかというと「webサーバ上で動作させる際にキャッシュディレクトリにファイルの書き込みが出来ない」というエラーが発生します。

CentOSの場合はこの問題を一発で解決させる方法があります。それはsetfaclコマンドによるアクセス制御リストの設定です。UNIX/Linuxでは伝統的に「ファイル所有者/ファイル所有者と同一グループ/それ以外のユーザ」という区分でファイルアクセス管理を実施しています。しかし、昨今のシステムではその枠を超えたアクセス制御が出来るようになっています。これにより、上記の区分以外の特定ユーザに対してファイルの読み書き実行権限を与える事が可能となりました。

具体的なコマンド例は下記の通りです。こちらはプロジェクトディレクトリ直下で実行してください。

/usr/bin/setfacl -R -m u:YOURNAME:rwX -m u:apache:rwX var/cache
/usr/bin/setfacl -dR -m u:YOURNAME:rwX -m u:apache:rwX var/cache

「YOURNAME」はお使いのユーザ名に置き換えてください。上記コマンドを実行する事によりvar/cacheに対してapacheユーザに読み書き実行権限を与えます。

setfaclコマンドの使用方法詳細については割愛しますのでご興味のある方は各自で調べてください。

dev環境であれば随時キャッシュはクリアされますが、prod環境の場合は手動でキャッシュの削除が必要となります。下記のコマンドをプロジェクトディレクトリ直下で実行することによりキャッシュの削除が可能です。

$ ./bin/console cache:clear -e prod
$ ./bin/console cache:clear -e dev

「-e prod」でprod環境の、「-e dev」でdev環境のキャッシュをそれぞれ消します。なお、前述のsetfaclコマンドでアクセス権限を与えていない場合、都度アクセス権限を設定しないと毎回webブラウザでプロジェクトにアクセスする毎にエラーを出すので、余程の事が無い限りは上記を実行しておいた方が賢明です。

前の記事

Doctrine for Symfony4

次の記事

WooCommerce