Laravel 5 - ล้างแคชในเซิร์ฟเวอร์โฮสติ้งที่ใช้ร่วมกัน


125

คำถามค่อนข้างชัดเจน

php artisan cache:clear

มีวิธีแก้ปัญหาในการล้างแคชเหมือนด้านบนที่เราใช้ใน CLI หรือไม่ ฉันใช้บริการโฮสติ้งที่ใช้ร่วมกันที่เป็นที่นิยม แต่ตามแผนของฉันฉันไม่มีสิทธิ์เข้าถึงแผงควบคุม

** ฉันต้องการล้างแคชมุมมอง **

ฉันเห็นคำถามเกือบจะเหมือนกัน แต่ก็ไม่ได้ช่วยอะไรฉัน


2
การใช้ Laravel บนโฮสติ้งที่ใช้ร่วมกันเป็นเรื่องบ้า IMO ด้วยเหตุผลเช่นนี้ คุณกำลังเรียกใช้การย้ายข้อมูลอย่างไร
ceejayoz

@ceejayoz .. อันที่จริงฉันเพิ่งเริ่มโปรเจ็กต์นี้และเป็นโปรเจ็กต์ laravel แรกของฉันด้วย ฉันยังไม่ได้ไปที่การย้ายถิ่นนี้เลย ..
Rinto George

11
"การใช้ Laravel บนโฮสติ้งที่ใช้ร่วมกันเป็นเรื่องบ้า" @ceejayoz ... แต่นี่คือโลกแห่งความจริง บางครั้งคุณต้องทำเพราะไม่มีทางเลือก
elb98rm

2
@ elb98rm A VPS จาก Digital Ocean เริ่มต้นที่ $ 5 / เดือน มีตัวเลือกให้เลือกเสมอรวมถึงไม่ทำงานให้กับลูกค้าที่ไม่เต็มใจจ่าย $ 5 / เดือนสำหรับการโฮสต์
ceejayoz

19
@ceejayoz ไม่เกี่ยวข้อง - บ่อยครั้งที่ฉันทำงานในสถานที่ที่ไม่ใช่เงินเป็นความสัมพันธ์หรือโฮสต์และการเมืองภายใน ยิ่งไปกว่านั้น - บางครั้งอาจไม่ได้ขึ้นอยู่กับแผนกทั้งหมดของคุณอย่างแท้จริง โลกแห่งความจริงหมายความว่าบางครั้งคุณต้องทำงานกับสถานการณ์ คุณโชคดีหรือได้รับการคุ้มครองหากคุณไม่เคยต้องทำงานกับทางเลือกของคนอื่น ...
elb98rm

คำตอบ:


146

คุณสามารถเรียกใช้คำสั่ง Artisan ภายนอก CLI

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.php. คุณสามารถเลือกไดรเวอร์ต่างๆเช่นRedisหรือMemcachedเพื่อปรับปรุงการทำงานบนแคชแบบไฟล์


1
อะไรแคชที่คุณพยายามที่จะล้าง? cache:clearคำสั่งทำงานร่วมกับแคชแอปพลิเคชันซึ่งเป็นคำสั่งที่เข้าถึงได้จากส่วนCacheหน้า
Marco Pallante

ฉันต้องการล้างแคชของมุมมองมีหลายหน้าที่บันทึกไว้ในโฟลเดอร์ดูแคช อีกคำถามหนึ่งเมื่อกล่าวว่าแคชของแอปพลิเคชันซึ่งเป็นไดเรกทอรีทั้งหมดที่กำหนดเป้าหมาย
Rinto George

ขอบคุณสำหรับคำอธิบาย!. ฉันไม่กังวลเกี่ยวกับพื้นที่ดิสก์การแข่งขัน :) แต่มีคำถามหนึ่งหากการดูแคชไม่ถูกล้างแล้วการเปลี่ยนแปลงใหม่ในมุมมองมีผลต่อเว็บไซต์อย่างไรการตรวจสอบ I / O ใด ๆ เกิดขึ้นใน laravel หรือไม่?
Rinto George

1
ฉันคิดว่ามันไม่ได้ประทับเวลาตรวจสอบกับแฟ้มซึ่งจะเร็วกว่าการสร้างแม่แบบใบมีด
มาร์โก Pallante

ใช่ฉันเดาว่าอย่างไรก็ตามคุณช่วยฉันคิดในทางที่ถูกต้องขอบคุณ!
Rinto George

61

ฉันหวังว่านี่จะช่วยใครบางคนได้

ไปที่laravelFolder/bootstrap/cacheแล้วเปลี่ยนชื่อconfig.phpเป็นสิ่งที่คุณต้องการเช่น config.php_oldและโหลดไซต์ของคุณใหม่ นั่นควรจะทำงานเหมือนวูดู

แฮปปี้โค้ดดิ้ง ...


ผมยืนยัน. ทำงานใน laravel 5.4 ฉันโค้งคำนับ
ไซมอน

1
ทางออกเดียว! หากคุณสงสัยว่าทำไมถึงได้ผล? พระเจ้าเท่านั้นที่รู้
Luis Contreras

ยืนยันว่าจะลบความเจ็บปวดใน ** ในขณะที่โฮสต์ laravel 5.4 จาก Windows ไปยังโฮสติ้งที่ใช้ร่วมกัน .... ขอบคุณ !!!
Rikudo Pain

ดูเหมือนว่าในบางสถานการณ์นี่เป็นทางออกเดียวที่ใช้ได้ผล หากคุณมีการกำหนดค่าที่แคชไว้แล้วคุณลบ Facade หรือผู้ให้บริการเมื่อคุณรันคำสั่งเพื่อสร้างการกำหนดค่าที่แคชใหม่จะรันโดยใช้การกำหนดค่าแคชที่มีอยู่และพยายามอ้างอิงคลาส Facade และ / หรือผู้ให้บริการที่ ไม่มีอยู่อีกต่อไปและล้มเหลว อีกทางเลือกหนึ่งคือการลบการอ้างอิงออกจากไฟล์กำหนดค่าสร้างการกำหนดค่าแคชของคุณใหม่จากนั้นลบคลาส Facade และ / หรือ Service Provider ที่แท้จริง
Jason Wheeler

1
สำหรับ Laravel 6.6 ในการลบแคชฉันเพิ่งลบcacheโฟลเดอร์ & ใน.envค่าแคชเริ่มต้นของไฟล์ แต่หลังจากลบปัญหาทั้งหมดนี้อีกครั้ง.. เมื่อphp artisan optimize. ในที่สุดสิ่งนี้ก็แก้ปัญหาของฉันไม่ใช่โดยการเปลี่ยนชื่อ แต่เปลี่ยนค่าคีย์ในไฟล์ config.php ขอบคุณ @DeadGuy
Chandan 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

ฉันมีปัญหากับ config: cache มันไม่ทำงานในเส้นทางหรือตัวควบคุม แต่คนอื่นใช้งานได้ จะมีปัญหาอะไร
Nayeem

40

การกำหนดค่าแคช การกำหนดค่า laravel แพร่กระจายไปทั่วไฟล์หลายสิบไฟล์และincludingทุกไฟล์สำหรับแต่ละคำขอเป็นกระบวนการที่มีค่าใช้จ่ายสูง ในการรวมไฟล์ config ทั้งหมดของคุณเป็นไฟล์เดียวให้ใช้:

php artisan config:cache

โปรดทราบว่าการเปลี่ยนแปลงการกำหนดค่าจะไม่มีผลใด ๆ เมื่อคุณแคช ในการรีเฟรชแคชการกำหนดค่าให้เรียกใช้คำสั่งด้านบนอีกครั้ง ในกรณีที่คุณต้องการกำจัดแคชการกำหนดค่าทั้งหมดให้เรียกใช้

php artisan config:clear

Routes caching Routing ยังเป็นงานที่มีราคาแพงใน laravel ในการแคชไฟล์ route.php ให้รันคำสั่งด้านล่าง:

php artisan route:cache

อย่าลืมว่ามันใช้ไม่ได้กับการปิด ในกรณีที่คุณใช้การปิดนี่เป็นโอกาสที่ดีที่จะย้ายพวกมันไปยังคอนโทรลเลอร์เนื่องจากคำสั่งของช่างฝีมือจะทำให้เกิดข้อยกเว้นเมื่อพยายามรวบรวมเส้นทางที่เชื่อมโยงกับการปิดแทนที่จะใช้วิธีการควบคุมที่เหมาะสม เช่นเดียวกับ config cache การเปลี่ยนแปลงใด ๆ ใน route.php จะไม่มีผลอีกต่อไป ในการรีเฟรชแคชให้เรียกใช้คำสั่งด้านบนทุกครั้งที่คุณทำการเปลี่ยนแปลงไฟล์เส้นทาง หากต้องการกำจัดแคชเส้นทางโดยสมบูรณ์ให้เรียกใช้คำสั่งด้านล่าง:

php artisan route:clear

การเพิ่มประสิทธิภาพ Classmap

ไม่ใช่เรื่องแปลกที่โปรเจ็กต์ขนาดกลางจะแพร่กระจายไปทั่วไฟล์ PHP หลายร้อยไฟล์ เนื่องจากพฤติกรรมการเขียนโค้ดที่ดีกำหนดเราทุกอย่างมีไฟล์ของตัวเอง แน่นอนว่าสิ่งนี้ไม่ได้เกิดขึ้นโดยไม่มีข้อบกพร่อง Laravel ต้องรวมไฟล์ที่แตกต่างกันหลายสิบไฟล์สำหรับแต่ละคำขอซึ่งเป็นสิ่งที่มีค่าใช้จ่ายสูง

ดังนั้นวิธีการเพิ่มประสิทธิภาพที่ดีคือการประกาศว่าไฟล์ใดถูกใช้สำหรับทุกคำขอ (ตัวอย่างเช่นผู้ให้บริการทั้งหมดของคุณมิดเดิลแวร์และอื่น ๆ อีกเล็กน้อย) และรวมไว้ในไฟล์เดียวเท่านั้นซึ่งจะโหลดในภายหลังสำหรับแต่ละคำขอ สิ่งนี้ไม่แตกต่างจากการรวมไฟล์ javascript ทั้งหมดของคุณเข้าด้วยกันดังนั้นเบราว์เซอร์จะต้องส่งคำขอไปยังเซิร์ฟเวอร์น้อยลง

คุณควรประกาศไฟล์คอมไพล์เพิ่มเติม (อีกครั้ง: ผู้ให้บริการมิดเดิลแวร์และอื่น ๆ ) ใน config / compile.php ในคีย์ไฟล์ เมื่อคุณใส่ทุกอย่างที่จำเป็นสำหรับทุกคำขอที่ส่งไปยังแอปของคุณแล้วให้เชื่อมต่อเข้าด้วยกันในไฟล์เดียวด้วย:

php artisan optimize --force

การเพิ่มประสิทธิภาพการโหลดอัตโนมัติของนักแต่งเพลง

อันนี้ไม่เพียง แต่สำหรับ laravel แต่สำหรับแอปพลิเคชันใด ๆ ที่ใช้นักแต่งเพลง

ฉันจะอธิบายก่อนว่าโหลดอัตโนมัติ PSR-4 ทำงานอย่างไรจากนั้นฉันจะแสดงคำสั่งที่คุณควรเรียกใช้เพื่อเพิ่มประสิทธิภาพ หากคุณไม่สนใจที่จะรู้ว่านักแต่งเพลงทำงานอย่างไรฉันขอแนะนำให้คุณข้ามไปที่คำสั่งคอนโซลโดยตรง

เมื่อคุณขอให้ผู้แต่งสำหรับApp\Controllers\AuthControllerคลาสนั้นจะค้นหาการเชื่อมโยงโดยตรงในคลาสแมปก่อน คลาสแมปคืออาร์เรย์ที่มีการเชื่อมโยงคลาสและไฟล์แบบ 1 ต่อ 1 แน่นอนว่าคุณไม่ได้เพิ่มคลาสการเข้าสู่ระบบและไฟล์ที่เกี่ยวข้องลงในคลาสแมปด้วยตนเองผู้แต่งจะย้ายไปและค้นหาในเนมสเปซ เนื่องจากแอปเป็นเนมสเปซ PSR-4 ซึ่งมาพร้อมกับ Laravel โดยค่าเริ่มต้นและเชื่อมโยงกับapp/โฟลเดอร์ผู้แต่งจะพยายามแปลงชื่อคลาส PSR-4 เป็นชื่อไฟล์ด้วยขั้นตอนการจัดการสตริงพื้นฐาน ในท้ายที่สุดเดาได้ว่าApp\Controllers\AuthControllerต้องอยู่ในไฟล์ AuthController.php ซึ่งอยู่ในControllers/โฟลเดอร์ที่โชคดีควรอยู่ในโฟลเดอร์เนมสเปซซึ่งก็คือapp/.

การทำงานหนักทั้งหมดนี้เพื่อให้App\Controllers\AuthControllerคลาสมีอยู่ในapp/Controllers/AuthController.phpไฟล์เท่านั้น ในการให้นักแต่งเพลงสแกนแอปพลิเคชันทั้งหมดของคุณและสร้างการเชื่อมโยงคลาสและไฟล์แบบ 1 ต่อ 1 โดยตรงให้รันคำสั่งต่อไปนี้:

composer dumpautoload -o

โปรดทราบว่าหากคุณใช้ php artisan optimize --force อยู่แล้วคุณไม่จำเป็นต้องเรียกใช้โปรแกรมนี้อีกต่อไป เนื่องจากคำสั่งปรับให้เหมาะสมแล้วจะบอกให้ผู้แต่งสร้างโหลดอัตโนมัติที่ปรับให้เหมาะสมแล้ว


30

แพคเกจนี้สำหรับ PHP ^ ^

ใช้แพ็คเกจนี้ใน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 5หรือ สำหรับapp\storage\viewslaravel 4


6

หากต้องการล้างแคชทั้งหมดนอก 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

2

คุณสามารถทำได้หากคุณใช้Lumenจากไฟล์Laravelของคุณroutes/web.php:

use Illuminate\Support\Facades\Artisan;

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

2

ใช้หน้านี้สองสามครั้งเพื่อคัดลอกและวางคำสั่งด่วนลงในตัวแต่งเพลงดังนั้นฉันจึงเขียนคำสั่งที่ทำคำสั่งเหล่านี้ในคำสั่งช่างฝีมือเดียว

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โฟลเดอร์

จากนั้นรันคำสั่งในนักแต่งเพลง php artisan traqza:clear-everything

มีความสุขในการเขียนโค้ด

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


1

คุณสามารถทำได้ผ่านเราเตอร์เช่นกันคล้ายกับคำตอบของ Francesco แต่มีความยุ่งเหยิงน้อยกว่าในการกำหนดค่าเราเตอร์

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

สิ่งนี้ได้ผลสำหรับฉัน ในโปรเจ็กต์ของคุณไปที่: storage> framework> views ลบไฟล์ทั้งหมดในนั้นและรีเฟรชหน้าของคุณ


1

ลองสิ่งนี้ด้วย

สำหรับ cli

php ช่างฝีมือชัดเจน: แคช

สำหรับใช้คำสั่งช่างฝีมือ

 Route::get('/clear-cache', function() {
 $exitCode = Artisan::call('cache:clear');
 return 'Application cache cleared';

});

[ https://www.tutsmake.com/laravel-clear-cache-using-artisan-command-cli/][1]

  [1]: https://www.tutsmake.com/laravel-clear-cache-using-artisan-command-cli/

0

ในขณะที่ฉันไม่เห็นด้วยอย่างยิ่งกับแนวคิดในการเรียกใช้แอป laravel บนโฮสติ้งที่ใช้ร่วมกัน (เป็นความคิดที่ไม่ดี) แพคเกจนี้น่าจะช่วยแก้ปัญหาของคุณได้ เป็นแพ็คเกจที่ให้คุณรันคำสั่งช่างฝีมือจากเว็บได้ มันยังห่างไกลจากความสมบูรณ์แบบ แต่สามารถใช้ได้กับผู้ใช้บางอย่าง

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



0

ฉันเชื่อว่าวิธีที่มีประสิทธิภาพมากกว่านี้คือการใช้โมดูลงาน cron ในพาเนลผู้ดูแลระบบเซิร์ฟเวอร์ที่ใช้ร่วมกันเพื่อรันคำสั่งตัวกำหนดตารางเวลา laravel ซึ่งจะเรียกคำสั่ง artisan ที่กำหนดค่าไว้สิ่งนี้ควรทำงาน:

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

ด้วยการตั้งค่าตัวกำหนดตารางเวลาใน cron คุณสามารถแก้ไขวิธีการกำหนดเวลาใน\ App \ Console \ Kernel.phpเพื่อเรียกใช้คำสั่งช่างฝีมือที่ถูกต้องดังนี้:

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

คุณสามารถลบบรรทัดด้านบนได้ตลอดเวลาหลังจากรันคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.