Laravel 5 –共有ホスティングサーバーのキャッシュをクリアする


125

質問はかなり明確です。

php artisan cache:clear

CLIで使用する上記のようなキャッシュをクリアする回避策はありますか?私は人気のある共有ホスティングサービスを使用していますが、私の計画では、コントロールパネルにアクセスできません。

**ビューのキャッシュをクリアしたい。**

私が見た質問このとほぼ同じ、それは私を助けていません。


2
共有ホスティングでLaravelを実行するのは、まさにこのような理由から、正気ではありません。どのように移行を実行していますか?
ceejayoz 2015

@ceejayoz ..実際、私はこのプロジェクトを始めたばかりで、最初のララベルプロジェクトも始めました。私は、この移行の事に来てまだ...しませんでした
Rintoジョージ

11
「共有ホスティングでのLaravelの実行は異常です」@ceejayoz ...しかし、これは現実の世界です。選択の余地がないため、時々あなたはしなければなりません。
elb98rm 2016

2
@ elb98rm Digital OceanからのVPSは、月額$ 5から始まります。ホスティングに月額5ドルを支払うことを望まないクライアントのために働かないことを含め、常に選択肢があります。
ceejayoz 2016

19
@ceejayoz関係ありません-私はお金ではない場所で働いてきました。それは関係やホストと内部の政治です。さらに-時にはそれはあなたの部門全体に文字通りではない場合があります。現実の世界では、状況に応じて作業する必要がある場合があります。他の人の選択で作業する必要がなかった場合、あなたは幸運であるか保護されています...
elb98rm

回答:


146

CLIの外でArtisanコマンドを呼び出すことができます。

Route::get('/clear-cache', function() {
    $exitCode = Artisan::call('cache:clear');
    // return what you want
});

公式ドキュメントはこちら http://laravel.com/docs/5.0/artisan#calling-commands-outside-of-cli


更新

ビューキャッシュを削除する方法はありません。それもphp artisan cache:clearしません。

ビューキャッシュを本当にクリアしたい場合は、独自のartisanコマンドを記述して前述のように呼び出すか、artisanパスを完全にスキップして、コントローラーまたはルートから呼び出すクラスのビューキャッシュをクリアする必要があると思います。

しかし、私の本当の質問は、本当にビューのキャッシュをクリアする必要があるのですか?私が現在取り組んでいるプロジェクトでは、ほぼ100のキャッシュされたビューがあり、それらの重みは1 Mb未満vendorですが、ディレクトリは> 40 Mbです。ビューキャッシュがディスク使用量の実際のボトルネックであるとは思いませんし、それをクリアする必要が実際にあったことはありません。

アプリケーションキャッシュについてはstorage/framework/cache、にfileドライバを設定した場合にのみ、ディレクトリに格納されますconfig/cache.phpRedisMemcachedなど、さまざまなドライバーを選択して、ファイルベースのキャッシュのパフォーマンスを向上させることができます。


1
どのキャッシュをクリアしようとしていますか?このcache:clearコマンドは、ファサードからアクセスされるアプリケーションキャッシュで機能しますCache
Marco Pallante、2015

ビューキャッシュをクリアしたいのですが、ビューキャッシュフォルダにたくさんのページが保存されています。もう1つの質問は、対象となるすべてのディレクトリであるアプリケーションキャッシュについてです。
Rinto George、2015

説明ありがとう!。私はディスクスペースを心配していません:)しかし、ビューキャッシュがクリアされない場合の1つの質問は、ビューの新しい変更がWebサイトにどのように影響するか、I / Oチェックがlaravelで発生することですか?
Rinto George、2015

1
ファイルのタイムスタンプチェックはブレードテンプレートを再構築するよりも高速だと思います
Marco Pallante '19 / 07/19

ええ、私はそう思います、とにかくあなたは私が正しい方法で考えるのを助けてくれました、ありがとう!
Rinto George、2015

61

これが誰かに役立つことを願っています

移動してlaravelFolder/bootstrap/cache、必要な名前に変更config.phpします。config.php_oldサイトをリロードします。これはブードゥー教のように機能するはずです。

ハッピーコーディング...


私が確認する。laravel 5.4で動作します。私はお辞儀をします。
サイモン2017年

1
唯一無二のソリューション!なぜうまくいくのか疑問に思うなら?神のみが知っている
Luis Contreras

Windowsから共有ホスティングにlaravel 5.4をホスティングしているときに、a **の問題を一掃することを確認しました。
陸道の痛み2017

いくつかのシナリオでは、これが機能する唯一のソリューションのようです。キャッシュされた構成があり、Facadeまたはサービスプロバイダーを削除した場合、新しいキャッシュされた構成を作成するコマンドを実行すると、既存のキャッシュされた構成を使用して実行され、Facadeまたはサービスプロバイダークラスを参照しようとします。存在しなくなり、失敗します。もう1つのオプションは、構成ファイルから参照を削除し、キャッシュされた構成を再生成してから、実際のFacadeおよび/またはサービスプロバイダークラスを削除することです。
Jason Wheeler

1
Laravel 6.6の場合、キャッシュを削除するには、cacheフォルダーと.envファイル内のデフォルトのキャッシュ値を削除しました。しかし、このすべての問題を再び削除した後..ときphp artisan optimize。最後に、これはconfig.phpファイルの名前を変更するのではなく、キー値を変更することで私の問題を解決しました。ありがとう@DeadGuy
Sharma

49

私が見ることができるように:http : //itsolutionstuff.com/post/laravel-5-clear-cache-from-route-view-config-and-all-cache-data-from-applicationexample.html

新しいキャッシュ消去コマンドで以下のコードを使用することは可能ですか?

//Clear Cache facade value:
Route::get('/clear-cache', function() {
    $exitCode = Artisan::call('cache:clear');
    return '<h1>Cache facade value cleared</h1>';
});

//Reoptimized class loader:
Route::get('/optimize', function() {
    $exitCode = Artisan::call('optimize');
    return '<h1>Reoptimized class loader</h1>';
});

//Route cache:
Route::get('/route-cache', function() {
    $exitCode = Artisan::call('route:cache');
    return '<h1>Routes cached</h1>';
});

//Clear Route cache:
Route::get('/route-clear', function() {
    $exitCode = Artisan::call('route:clear');
    return '<h1>Route cache cleared</h1>';
});

//Clear View cache:
Route::get('/view-clear', function() {
    $exitCode = Artisan::call('view:clear');
    return '<h1>View cache cleared</h1>';
});

//Clear Config cache:
Route::get('/config-cache', function() {
    $exitCode = Artisan::call('config:cache');
    return '<h1>Clear Config cleared</h1>';
});

特に本番環境では、すべての人にキャッシュをクリアする可能性を与える必要はないので、そのルートにコメントを付け、必要に応じてコードをコメント解除してルートを実行することをお勧めします。


1
このスニペットが最も役に立ちました。
Haseeb Zulfiqar 2017年

config:cacheに問題があります。ルートまたはコントローラーでは機能しませんが、他は機能します。何が問題でしょうか?
ナイエム

40

構成のキャッシング laravel 構成は数十のファイルに分散してincludingおり、要求ごとにそれらすべてがコストのかかるプロセスです。すべての構成ファイルを1つに結合するには、以下を使用します。

php artisan config:cache

キャッシュにいったん設定を変更しても効果がないことに注意してください。設定キャッシュを更新するには、上記のコマンドを再度実行します。設定キャッシュを完全に取り除きたい場合は、

php artisan config:clear

ルートのキャッシング ルーティングもlaravelの負荷の高いタスクです。routes.phpファイルをキャッシュするには、次のコマンドを実行します。

php artisan route:cache

クロージャーでは機能しないことに注意してください。クロージャを使用している場合、適切なコントローラメソッドではなくクロージャにバインドされているルートをコンパイルしようとすると、artisanコマンドが例外をスローするため、クロージャをコントローラに移動する絶好のチャンスです。configキャッシュと同じように、routes.phpを変更しても効果はありません。キャッシュを更新するには、routesファイルを変更するたびに上記のコマンドを実行します。ルートキャッシュを完全に取り除くには、次のコマンドを実行します。

php artisan route:clear

クラスマップの最適化

中規模プロジェクトが数百のPHPファイルに分散することは珍しくありません。適切なコーディング動作が必要になるため、すべてに独自のファイルがあります。もちろん、これには欠点がないわけではありません。Laravelはリクエストごとに数十の異なるファイルを含める必要がありますが、これはコストがかかります。

したがって、適切な最適化方法は、すべての要求に使用されるファイル(これは、たとえば、すべてのサービスプロバイダー、ミドルウェアなど)を宣言し、それらを1つのファイルに結合して、後で各要求に対して読み込まれます。これは、すべてのJavaScriptファイルを1つにまとめることと同じなので、ブラウザーはサーバーへの要求を少なくする必要があります。

追加のコンパイルファイル(サービスプロバイダー、ミドルウェアなど)は、config / compile.phpのfilesキーで宣言する必要があります。アプリへのすべてのリクエストに不可欠なものをすべて配置したら、それらを1つのファイルに連結します。

php artisan optimize --force

コンポーザーの自動ロードの最適化

これは、laravelだけでなく、composerを使用するすべてのアプリケーション用です。

最初にPSR-4オートロードがどのように機能するかを説明し、次にそれを最適化するために実行する必要があるコマンドを示します。composerの動作を知りたくない場合は、直接consoleコマンドにジャンプすることをお勧めします。

composerにApp\Controllers\AuthControllerクラスを要求すると、最初にクラスマップで直接関連付けが検索されます。クラスマップは、クラスとファイルの1対1の関連付けを持つ配列です。もちろん、手動でLoginクラスとその関連ファイルをクラスマップに追加しなかったので、composerは次に進み、名前空間を検索します。AppはデフォルトでLaravelに付属するPSR-4名前空間であり、app/フォルダーに関連付けられているため、composerは基本的な文字列操作手順でPSR-4クラス名をファイル名に変換しようとします。App\Controllers\AuthController結局のところ、それはAuthController.phpファイルに配置する必要があると推測します。このファイルControllers/は、名前空間フォルダーにあるはずのフォルダーにありますapp/

このすべてのハードワークは、App\Controllers\AuthControllerクラスがapp/Controllers/AuthController.phpファイルに存在することを取得するためだけです。composerでアプリケーション全体をスキャンし、クラスとファイルの1対1の直接の関連付けを作成するには、次のコマンドを実行します。

composer dumpautoload -o

すでにphp artisan optimize --forceを実行している場合は、これを実行する必要がないことに注意してください。最適化コマンドはすでに最適化されたオートロードを作成するようcomposerに指示しているためです。


30

このパッケージは、php ^ 7.0および^ laravel5.5用です。

このパッケージは、私がこの目的でのみ作成したcronjobで使用します。私も同じ状況に直面していた。 https://packagist.org/packages/afrazahmad/clear-cached-data インストールして実行します。

php artisan clear:data

そして、次のコマンドを自動的に実行します

php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan clear-compiled
php artisan config:cache

それが役に立てば幸い。

特定の時間に自動的に実行したい場合は、最初にcrnjobをセットアップする必要があります。例えば

 in app/console/kernel.php

スケジュール機能:

$schedule->command('clear:data')->dailyAt('07:00');

17

基本的には、ビューのキャッシュをクリアしたいと思います。

Laravel 5.1にはそのためのコマンドがあります

php artisan view:clear

9

あなたは、FTP経由で接続し、クリアすることができますstorage\framework\viewsのためのフォルダをlaravel 5app\storage\viewsためlaravel 4


7

CLIの外部ですべてのキャッシュクリアするには、次のようにします。これは私にとってはうまくいきます。

Route::get('/clear', function() {

   Artisan::call('cache:clear');
   Artisan::call('config:clear');
   Artisan::call('config:cache');
   Artisan::call('view:clear');

   return "Cleared!";

});

config:cache構成をクリアしてキャッシュします-したがって、両方を追加する必要はないと思います
Raja Khoury

承知しました。必要なラインを使用するだけです。
Amos

4
php artisan view:clear

キャッシュされたビューをクリアします


コマンドの代替php artisan cache:clear が求められます。これは、ストレージフォルダーに保存されている表示キャッシュをクリアしません。これはまさに必要なものです。
Spidi 2018年

2

ファイルでLumenfrom Laravelを使用している場合、これを行うことができroutes/web.phpます。

use Illuminate\Support\Facades\Artisan;

$app->get('/clear-cache', function () {
    $code = Artisan::call('cache:clear');
    return 'cache cleared';
});

1

フランチェスコの回答と同様に、ルーターを介してそれを行うこともできますが、ルーター構成の煩雑さが軽減されます

Route::get('/artisan/{cmd}', function($cmd) {
    $cmd = trim(str_replace("-",":", $cmd));
    $validCommands = ['cache:clear', 'optimize', 'route:cache', 'route:clear', 'view:clear', 'config:cache'];
    if (in_array($cmd, $validCommands)) {
        Artisan::call($cmd);
        return "<h1>Ran Artisan command: {$cmd}</h1>";
    } else {
        return "<h1>Not valid Artisan command</h1>";
    }
});

次に、http://myapp.test/artisan/cache-clearなどにアクセスして実行します。有効なArtisanコマンドを追加/編集する必要がある場合は、$ validCommands配列を更新してください。


1

これでうまくいきました。プロジェクトで、ストレージ>フレームワーク>ビューに移動します。そこにあるすべてのファイルを削除して、ページを更新してください。



1

このページを数回使用して、クイックコマンドをコピーしてコンポーザーに貼り付けたので、これらのコマンドを1つの職人コマンドで実行するコマンドを作成しました。

namespace App\Console\Commands\Admin;

use Illuminate\Console\Command;

class ClearEverything extends Command
{

    protected $signature = 'traqza:clear-everything';

    protected $description = 'Clears routes, config, cache, views, compiled, and caches config.';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $validCommands = array('route:clear', 'config:clear', 'cache:clear', 'view:clear', 'clear-compiled', 'config:cache');
        foreach ($validCommands as $cmd) {
            $this->call('' . $cmd . '');

        }
    }
}

中に配置しapp\Console\Commands\Adminたフォルダ

次に、composerでコマンドを実行します php artisan traqza:clear-everything

ハッピーコーディング。

Github-> https://github.com/Traqza/clear-everything


0

私は共有ホスティングでlaravelアプリを実行するという考え(全体的に悪い考え)には強く反対しますが、このパッケージで問題を解決できる可能性があります。これは、Webからいくつかの職人コマンドを実行できるようにするパッケージです。これは完璧とはほど遠いですが、いくつかのユースケースで機能します。

https://github.com/recca0120/laravel-terminal



0

これに対するより効率的なアプローチは、共有サーバーの管理パネルのcronジョブモジュールを使用して、設定されたartisanコマンドを呼び出すlaravelスケジューラコマンドを実行することです。

* * * * * /usr/bin/php /var/www/web/artisan schedule:run /dev/null 2>&1

cronでスケジューラを設定すると\ App \ Console \ Kernel.phpスケジュールメソッドを編集して、次のような適切なartisanコマンドを呼び出すことができます。

$schedule->command('queue:work')->cron('* * * * *')->withoutOverlapping();
$schedule->command('route:cache')->cron('0 0 * * *')->withoutOverlapping();

コマンドを実行した後は、いつでも上の行を削除できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.