Laravel 5.4アプリ。 CACHE_DRIVER
はfile
に設定され、QUEUE_DRIVER
は.env
のsync
に設定されます。
php artisan cache:clear
を実行すると、Cache cleared successfully
と表示されますが、storage/framework/cache
ディレクトリにはまだ236Kのファイルがあります。
これに不満があり、そのディレクトリからstorage/framework/cache
を使用してrm -rf *
の下にあるすべてのファイル/ディレクトリを手動で削除しました。
さて、art queue:restart
を実行すると[ErrorException] file_put_contents(/var/www/vhosts/my-app.com/releases/28/storage/framework/cache/ee/2f/ee2f842aa7bb1f53ed
を取得します
f3a2ed2c09a1807ffa6c90): failed to open stream: No such file or directory
だから、私には2つの問題があります。 1つ目は、Artisanがすべてのキャッシュファイルを削除しないのはなぜですか?それらを安全に削除するにはどうすればよいですか? 2番目の問題は、php artisan queue:restart
がエラーにならないように、これからどのように回復するかです。
更新:QUEUE_DRIVER
がsync
に設定されている場合、おそらくキューワーカーを再起動する理由がないので、そのコマンドをすべてスキップすると問題の半分が解決します。それでも、236Kのキャッシュファイルを適切に削除する方法がわかりません。
Sudoを使用:Sudo rm -r ./storage/framework/cache
Laravelは、0755の行に沿って何かに権限を付けてキャッシュファイルを書き込み、キャッシュへの書き込みを制限することが判明したため、キャッシュに書き込むすべてのプロセスが同じユーザーを使用していることを確認してください(同じグループに属しているだけではありません)。オーナー。
私のように、これらのそれぞれに異なるユーザーを使用する場合:
異なるユーザーに属し、必要なグループ(例としてwww-data)に属していても、他のユーザーが書き込みまたは削除できないファイルになります。
Larvelで新しいキャッシュファイル権限を0775のようなものに設定する方法を誰かが見つけられることを願っています。親から継承しただけでいいのです。
これは、スーパーバイザープロセスとPHPプロセス間でCache::remember()
の問題を引き起こし、キャッシュされたファイルに異なるユーザーが書き込めないためにput_file_contents
エラーが発生していました。 。
私は同じ問題を抱えていましたが、私の場合、ファイルは書き込み保護されていたため削除されませんでした。 rm -r ./storage/framework/cache
を使用して手動で削除しようとすると、警告rm: descend into write-protected directory 'cache/c5'?
が表示されました。キャッシュ内のすべてのファイルに対してyesと入力するつもりはなかったので、Sudoと同じコマンドを実行しましたが、Sudo rm -r ./storage/framework/cache
が問題なく動作しました。
これは、Artisan cache:clear
によって削除されない理由についてのあなたの質問に答えます。また、rm
を実行するのは十分簡単な回避策です。ただし、ファイルが書き込み禁止として書き込まれている理由の問題は解決しません。
キャッシュを削除した後、Laravelは再びキャッシュを書き込み禁止として作成します。これはおそらくバグであることを意味し、Laravel開発者にバグレポートを提出する必要があります。回避策は些細なことなので、他の誰かに任せることにします。
あなたが試すことができます:
php artisan config:cache
それは私の問題のほとんどを解決します。