Laravel 5 - Hapus Cache di Server Shared Hosting

125

Pertanyaannya cukup jelas.

php artisan cache:clear

Apakah ada solusi untuk menghapus cache seperti di atas yang kami gunakan di CLI. Saya menggunakan layanan hosting bersama yang populer, tetapi sesuai paket saya, saya tidak memiliki akses panel kontrol.

** Saya ingin menghapus cache tampilan. **

Saya melihat pertanyaan yang hampir sama seperti ini, tetapi tidak membantu saya.

Rinto George
sumber
2
Menjalankan Laravel di shared hosting itu gila, IMO, karena alasan semacam ini. Bagaimana Anda menjalankan migrasi?
ceejayoz
@ceejayoz .. Sebenarnya saya baru saja memulai proyek ini, dan ini juga proyek laravel pertama saya. Saya belum datang ke masalah migrasi ini ..
Rinto George
11
"Menjalankan Laravel di shared hosting itu gila" @ceejayoz ... Tapi ini dunia nyata. Terkadang Anda harus melakukannya karena tidak ada pilihan.
elb98rm
2
@ elb98rm VPS dari Digital Ocean mulai dari $ 5 / bulan. Selalu ada pilihan, termasuk tidak bekerja untuk klien yang tidak mau membayar $ 5 / bulan untuk hosting.
ceejayoz
19
@ceejayoz Tidak relevan - sering kali saya bekerja di tempat-tempat yang bukan uangnya, melainkan hubungan atau tuan rumah dan politik internal. Selain itu - terkadang secara harfiah tidak sampai ke seluruh departemen Anda. Dunia nyata berarti Anda terkadang perlu bekerja dengan suatu situasi. Anda beruntung atau terlindung jika Anda tidak pernah harus bekerja dengan pilihan orang lain ...
elb98rm

Jawaban:

146

Anda dapat memanggil perintah Artisan di luar CLI.

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

Anda dapat memeriksa dokumen resminya di sini http://laravel.com/docs/5.0/artisan#calling-commands-outside-of-cli


Memperbarui

Tidak ada cara untuk menghapus cache tampilan. Itu juga php artisan cache:cleartidak.

Jika Anda benar-benar ingin menghapus cache tampilan, saya pikir Anda harus menulis artisanperintah Anda sendiri dan memanggilnya seperti yang saya katakan sebelumnya, atau lewati artisanjalur dan hapus cache tampilan di beberapa kelas yang Anda panggil dari pengontrol atau rute.

Tapi, pertanyaan sebenarnya saya adalah apakah Anda benar-benar perlu menghapus cache tampilan ? Dalam proyek yang saya kerjakan sekarang, saya memiliki hampir 100 tampilan cache dan bobotnya kurang dari 1 Mb, sedangkan vendordirektori saya > 40 Mb. Saya tidak berpikir melihat cache adalah hambatan nyata dalam penggunaan disk dan tidak pernah benar-benar perlu untuk menghapusnya.

Sedangkan untuk cache aplikasi , disimpan di storage/framework/cachedirektori, tetapi hanya jika Anda mengkonfigurasi filedriver di config/cache.php. Anda dapat memilih banyak driver berbeda, seperti Redis atau Memcached , untuk meningkatkan kinerja melalui cache berbasis file.

Marco Pallante
sumber
1
Cache apa yang Anda coba hapus? The cache:clearperintah bekerja dengan aplikasi cache , salah satu yang diakses dari Cachefasad.
Marco Pallante
Saya ingin menghapus cache tampilan, ada banyak halaman yang disimpan di folder cache tampilan. Satu pertanyaan lagi, ketika mengatakan cache aplikasi, yang merupakan semua direktori yang ditargetkannya.
Rinto George
Terima kasih untuk penjelasannya!. Saya tidak khawatir tentang ruang disk :) Tetapi satu pertanyaan jika cache tampilan tidak dihapus, lalu bagaimana perubahan tampilan baru dapat memengaruhi situs web, apakah ada pemeriksaan I / O yang terjadi di laravel?
Rinto George
1
Saya pikir itu melakukan pemeriksaan stempel waktu pada file, yang lebih cepat daripada membangun kembali template blade
Marco Pallante
Ya, saya rasa begitu, bagaimanapun juga Anda membantu saya untuk berpikir dengan cara yang benar, terima kasih!
Rinto George
61

Saya harap ini membantu seseorang

Pergi ke laravelFolder/bootstrap/cachekemudian ganti nama config.phpmenjadi apa pun yang Anda inginkan misalnya. config.php_olddan muat ulang situs Anda. Itu harus bekerja seperti voodoo.

Selamat Coding ...

Orang Mati
sumber
Saya mengkonfirmasi. Bekerja di laravel 5.4. Aku membungkuk.
simon
1
Satu-satunya solusi! Jika Anda bertanya-tanya mengapa berhasil? hanya Tuhan yang tahu
Luis Contreras
Dikonfirmasi menghapus rasa sakit di ** saat hosting laravel 5.4 dari windows ke shared hosting .... TERIMA KASIH !!!
Rikudo Pain
Tampaknya dalam beberapa skenario, ini adalah satu-satunya solusi yang berhasil. Jika Anda memiliki konfigurasi cache, dan kemudian Anda menghapus Fasad atau Penyedia Layanan, saat Anda menjalankan perintah untuk membuat konfigurasi cache baru, perintah tersebut berjalan menggunakan konfigurasi cache yang ada, dan mencoba mereferensikan kelas Fasad dan / atau Penyedia Layanan yang tidak ada lagi dan gagal. Opsi lainnya adalah menghapus referensi dari file konfigurasi, membuat ulang konfigurasi yang di-cache, lalu menghapus kelas Facade dan / atau Penyedia Layanan yang sebenarnya.
Jason Wheeler
1
Untuk Laravel 6.6, Untuk menghapus cache, saya baru saja menghapus cachefolder & di .envnilai cache default file. Tapi setelah menghapus semua ini mendapatkan masalah lagi .. kapan php artisan optimize. Akhirnya yang satu ini memecahkan masalah saya, bukan dengan mengganti nama tetapi mengubah nilai kunci dalam file config.php. Terima kasih @DeadGuy
Chandan Sharma
49

Seperti yang saya lihat: http://itsolutionstuff.com/post/laravel-5-clear-cache-from-route-view-config-and-all-cache-data-from-applicationexample.html

apakah mungkin untuk menggunakan kode di bawah ini dengan perintah cache yang baru:

//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>';
});

Tidak perlu memberikan kemungkinan untuk menghapus cache untuk semua orang, terutama di lingkungan produksi, jadi saya sarankan untuk mengomentari rute itu dan, bila diperlukan, untuk menghapus komentar kode dan menjalankan rute.

Francesco
sumber
1
Saya menemukan potongan ini paling membantu.
Haseeb Zulfiqar
Saya punya masalah dengan config: cache-nya tidak berfungsi di rute atau pengontrol tetapi yang lain berfungsi. apa masalahnya?
Nayeem
40

Config caching Konfigurasi laravel tersebar di banyak file, dan includingsetiap file untuk setiap permintaan adalah proses yang mahal. Untuk menggabungkan semua file konfigurasi Anda menjadi satu, gunakan:

php artisan config:cache

Ingatlah bahwa setiap perubahan pada konfigurasi tidak akan berpengaruh apa pun setelah Anda menyimpannya dalam cache. Untuk menyegarkan cache konfigurasi, jalankan kembali perintah di atas. Jika Anda ingin sepenuhnya menghapus cache konfigurasi, jalankan

php artisan config:clear

Routes caching Routing juga merupakan tugas yang mahal di laravel. Untuk menyimpan file routes.php ke cache, jalankan perintah di bawah ini:

php artisan route:cache

Ingatlah bahwa itu tidak bekerja dengan penutupan. Jika Anda menggunakan closure, ini adalah kesempatan bagus untuk memindahkannya ke controller, karena perintah artisan akan memunculkan pengecualian saat mencoba mengompilasi rute yang terikat ke closure alih-alih metode controller yang tepat. Sama seperti config cache, perubahan apapun pada routes.php tidak akan berpengaruh lagi. Untuk menyegarkan cache, jalankan perintah di atas setiap kali Anda melakukan perubahan pada file rute. Untuk benar-benar menghilangkan cache rute, jalankan perintah di bawah ini:

php artisan route:clear

Pengoptimalan peta kelas

Tidak jarang proyek berukuran sedang tersebar di ratusan file PHP. Karena perilaku pengkodean yang baik menentukan kita, semuanya memiliki filenya sendiri. Ini, tentu saja, tidak datang tanpa kekurangan. Laravel harus menyertakan lusinan file berbeda untuk setiap permintaan, yang merupakan hal yang mahal untuk dilakukan.

Karenanya, metode pengoptimalan yang baik adalah mendeklarasikan file mana yang digunakan untuk setiap permintaan (misalnya, semua penyedia layanan Anda, middlewares, dan beberapa lainnya) dan menggabungkannya hanya dalam satu file, yang kemudian akan dimuat untuk setiap permintaan. Ini tidak berbeda dengan menggabungkan semua file javascript Anda menjadi satu, jadi browser harus membuat lebih sedikit permintaan ke server.

File kompilasi tambahan (sekali lagi: penyedia layanan, middlewares, dan seterusnya) harus dideklarasikan oleh Anda di config / compile.php, di kunci file. Setelah Anda meletakkan semua yang penting untuk setiap permintaan yang dibuat ke aplikasi Anda di sana, gabungkan semuanya dalam satu file dengan:

php artisan optimize --force

Mengoptimalkan pemuatan otomatis komposer

Yang ini tidak hanya untuk laravel, tetapi untuk aplikasi apa pun yang menggunakan komposer.

Saya akan menjelaskan terlebih dahulu bagaimana autoload PSR-4 bekerja, dan kemudian saya akan menunjukkan kepada Anda perintah apa yang harus Anda jalankan untuk mengoptimalkannya. Jika Anda tidak tertarik untuk mengetahui cara kerja komposer, saya sarankan Anda langsung beralih ke perintah konsol.

Saat Anda meminta komposer untuk App\Controllers\AuthControllerkelas tersebut, pertama kali ia mencari asosiasi langsung di peta kelas. Peta kelas adalah larik dengan asosiasi kelas dan file 1-ke-1. Karena, tentu saja, Anda tidak menambahkan kelas Login dan file terkaitnya secara manual ke peta kelas, komposer akan melanjutkan dan mencari di ruang nama. Karena App adalah namespace PSR-4, yang datang secara default dengan Laravel dan terkait dengan app/folder, komposer akan mencoba mengubah nama kelas PSR-4 menjadi nama file dengan prosedur manipulasi string dasar. Pada akhirnya, ia menebak bahwa itu App\Controllers\AuthControllerharus ditempatkan di file AuthController.php, yang ada di Controllers/folder yang untungnya ada di folder namespace, yaitu app/.

Semua kerja keras ini hanya untuk mendapatkan bahwa App\Controllers\AuthControllerkelas tersebut ada di app/Controllers/AuthController.phpfile. Agar komposer memindai seluruh aplikasi Anda dan membuat pengaitan kelas dan file 1-ke-1 langsung, jalankan perintah berikut:

composer dumpautoload -o

Ingatlah bahwa jika Anda sudah menjalankan php artisan optimization --force, Anda tidak perlu menjalankan yang ini lagi. Karena perintah optimalkan sudah memberi tahu komposer untuk membuat pemuatan otomatis yang dioptimalkan.

Maulik
sumber
30

Paket ini untuk php ^ 7.0 dan ^ laravel5.5 .

Gunakan paket ini di cronjob yang telah saya buat untuk tujuan ini saja. Saya juga menghadapi situasi yang sama. https://packagist.org/packages/afrazahmad/clear-cached-data Instal dan jalankan:

php artisan clear:data

dan itu akan menjalankan perintah berikut secara otomatis

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

Semoga membantu.

Jika Anda ingin menjalankannya secara otomatis pada waktu tertentu maka Anda harus mengatur crnjob terlebih dahulu. misalnya

 in app/console/kernel.php

Dalam fungsi jadwal:

$schedule->command('clear:data')->dailyAt('07:00');
Afraz Ahmad
sumber
17

Pada dasarnya saya ingin menghapus cache views.

Sekarang ada perintah di Laravel 5.1 untuk itu

php artisan view:clear
Laurence
sumber
9

Anda dapat terhubung melalui FTP dan menghapus storage\framework\viewsfolder untuk laravel 5atau app\storage\viewsuntuk laravel 4.

gandra404
sumber
7

Untuk menghapus semua cache di luar CLI , Lakukan ini; Ini berhasil untuk saya.

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

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

   return "Cleared!";

});
Amos Chihi
sumber
config:cacheakan menghapus dan menyimpan konfigurasi - jadi saya rasa tidak perlu menambahkan keduanya
Raja Khoury
Tentu. Anda hanya menggunakan jalur yang Anda butuhkan.
Amos Chihi
4
php artisan view:clear

akan menghapus tampilan cache

Spidi
sumber
Alternatif untuk perintah php artisan cache:clear tersebut diminta. Ini tidak akan menghapus cache yang dilihat yang disimpan di folder penyimpanan, yang memang dibutuhkan.
Spidi
2

Anda dapat melakukan ini jika Anda menggunakan Lumenfrom Laravelpada routes/web.phpfile Anda :

use Illuminate\Support\Facades\Artisan;

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

Anda juga dapat melakukannya melalui router, mirip dengan jawaban Francesco tetapi dengan konfigurasi router yang lebih rapi

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>";
    }
});

Kemudian jalankan dengan mengunjungi http: //myapp.test/artisan/cache-clear dll. Jika Anda perlu menambahkan / mengedit perintah Artisan yang valid cukup perbarui array $ validCommands.

kimiawi
sumber
1

Ini berhasil untuk saya. Dalam proyek Anda, buka: storage> framework> views. Hapus semua file di sana dan segarkan halaman Anda.

rogramatic
sumber
1

Menggunakan halaman ini beberapa kali untuk menyalin dan menempelkan perintah cepat ke komposer, jadi saya menulis perintah yang melakukan perintah ini dalam satu perintah pengrajin tunggal.

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 . '');

        }
    }
}

Tempatkan di app\Console\Commands\Adminfolder

lalu jalankan perintah di komposer php artisan traqza:clear-everything

Selamat membuat kode.

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

lzoesch.dll
sumber
0

Meskipun saya sangat tidak setuju dengan gagasan menjalankan aplikasi laravel di shared hosting (ide yang buruk di mana-mana), paket ini kemungkinan akan menyelesaikan masalah Anda. Ini adalah paket yang memungkinkan Anda menjalankan beberapa perintah artisan dari web. Ini jauh dari sempurna, tetapi dapat bekerja untuk beberapa kasus penggunaan.

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

Ben Yanke
sumber
0

Saya percaya pendekatan yang lebih efisien untuk ini adalah dengan menggunakan modul pekerjaan cron di panel admin server bersama untuk menjalankan perintah penjadwal laravel yang pada gilirannya akan memanggil perintah pengrajin yang dikonfigurasi, sesuatu seperti ini harus melakukan pekerjaan:

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

Dengan pengaturan scheduler di cron, Anda dapat mengedit metode jadwal di \ App \ Console \ Kernel.php untuk memanggil perintah artisan yang tepat, seperti ini:

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

Anda selalu dapat menghapus baris di atas setelah perintah dijalankan

korwalskiy.dll
sumber