TL;DR
-
php artisan optimizeukládá do mezipaměti konfiguraci, trasy, události a pohledy. jako soubory in/storage/frameworka dělá ne dotkněte se ovladače mezipaměti. -
php artisan cache:clearsplachuje pouze ovladač mezipaměti aplikace (Redis, DB atd.) a neodstraní soubory optimalizace. -
php artisan optimize:clearodstraní soubory optimalizace a vymaže data ovladače z mezipaměti a sestavené třídy. Použijte--exceptnebo jednotlivé příkazy pro vymazání, pokud chcete odstranit pouze určité mezipaměti. Nepochopení těchto rozdílů může způsobit zbytečné nebo nesprávné operace při nasazení Laravelu.
Příběh tohoto článku
V jednom z mých příspěvky na blogu, došlo k nedorozumění ohledně toho, co některé příkazy Laravel Artisan dělají v zákulisí. V tom příspěvek na blogu, jsem se podělil o vlastní skript pro nasazení systému Laravel, který obsahoval následující dva příkazy v tomto pořadí:
# Optimize view, routes, events, configsphp artisan optimize # Clear cachesphp artisan cache:clear
To vyvolalo mnoho kritiky. Mnozí se domnívali, že výše uvedené příkazy jsou prováděny ve špatném pořadí:
- První příkaz ukládá určitá data do mezipaměti.
- Druhý příkaz odstraní to, co bylo uloženo do mezipaměti prvním příkazem.
To je však nedorozumění.
php artisan cache:clear vs. optimize vs. optimize:clear
Podívejme se nejprve na to, jak Laravel tyto příkazy definuje:
-
php artisan cache:clear- Vypláchne mezipaměť aplikace. -
php artisan optimize- Při nasazení aplikace do produkčního prostředí by měla být do mezipaměti uložena celá řada souborů, včetně konfigurace, událostí, tras a pohledů. Laravel poskytuje jediný, pohodlnýoptimizeArtisan, který všechny tyto soubory uloží do mezipaměti.
Obě definice používají slovo "cache", ale týkají se zcela odlišných věcí. Začněme s optimize příkaz.
Na stránkách optimize příkaz ukládá do mezipaměti události, konfigurace, trasy a pohledy. v souborech. Neinteraguje s vaším skutečným ovladačem mezipaměti (např. Redis, databáze, Memcached atd.). Všechny soubory mezipaměti generované pomocí optimize jsou uloženy v adresářích v rámci /storage/framework adresář. To znamená, že php artisan optimize a php artisan cache:clear nemají žádný vztah.
Pokud vás zajímá, jak odstranit soubory mezipaměti vytvořené nástrojem optimize bohužel neexistuje konkrétní příkaz, který by umožňoval pouze tuto činnost.
Na stránkách php artisan cache:clear příkaz pouze propláchne data z ovladačů mezipaměti, nezasahuje do souborů mezipaměti vytvořených pomocí optimize příkaz.
Co dělá php artisan optimize:clear jasné?
K dispozici je také php artisan optimize:clear příkaz. Tento příkaz však dělá víc než jen odstraňuje soubory mezipaměti vytvořené příkazem optimize; také odstraní zkompilované třídy a propláchne data ze skutečného ovladače mezipaměti.
Jak vysvětluje Laravel:
Na stránkách
optimize:clearlze použít metodu pro odstranění všech mezipamětí vygenerované pomocíoptimizea také všechny klávesy v výchozího ovladače mezipaměti.
Odstraní všechny soubory vytvořené pomocí optimize propláchne mezipaměť aplikace a odstraní zkompilované třídy.
To znamená, že optimize:clear provádí další úkoly, které možná nechcete. Pokud je vaším cílem odstranit pouze soubory mezipaměti vytvořené pomocí optimize, budete muset příslušné příkazy Artisanu spustit ručně nebo použít příkaz --except příznak s optimize:clear příkaz:
php artisan optimize:clear --except=cache,compiled # OR php artisan view:clearphp artisan route:clearphp artisan event:clearphp artisan config:clear
Závěr
Je důležité pochopit rozdíl mezi php artisan cache:clear, php artisan optimizea php artisan optimize:clear aby nedocházelo ke zbytečným zmatkům. Všechny tyto příkazy sice zahrnují "cache", ale týkají se zcela odlišných věcí. Nepochopení jejich účelu může vést ke zbytečným operacím nebo dokonce k nechtěným problémům při nasazení. Když budete vědět, co který příkaz dělá a nedělá, můžete se pro své projekty Laravel rozhodovat lépe. Při příštím nasazení tak budete přesně vědět, co se děje v zákulisí.