web-dev-qa-db-ja.com

Laravel 5.4-php artisan cache:clearは、 'file'キャッシュドライバーを使用するとキャッシュファイルをクリアしません

Laravel 5.4アプリ。 CACHE_DRIVERfileに設定され、QUEUE_DRIVER.envsyncに設定されます。

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_DRIVERsyncに設定されている場合、おそらくキューワーカーを再起動する理由がないので、そのコマンドをすべてスキップすると問題の半分が解決します。それでも、236Kのキャッシュファイルを適切に削除する方法がわかりません。

13
fronzee

短い答え

Sudoを使用:Sudo rm -r ./storage/framework/cache

長い答え

Laravelは、0755の行に沿って何かに権限を付けてキャッシュファイルを書き込み、キャッシュへの書き込みを制限することが判明したため、キャッシュに書き込むすべてのプロセスが同じユーザーを使用していることを確認してください(同じグループに属しているだけではありません)。オーナー。

私のように、これらのそれぞれに異なるユーザーを使用する場合:

  • PHPプロセス
  • アーティザンCLI
  • スーパーバイザー経由の職人(仕事用)

異なるユーザーに属し、必要なグループ(例として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開発者にバグレポートを提出する必要があります。回避策は些細なことなので、他の誰かに任せることにします。

13
Precastic

あなたが試すことができます:

php artisan config:cache

それは私の問題のほとんどを解決します。

6
Leonardo Cabré