Laravel 5 - Paylaşılan Barındırma Sunucusunda Önbelleği Temizle


125

Soru oldukça açık.

php artisan cache:clear

CLI'de kullandığımız gibi önbelleği temizlemek için herhangi bir geçici çözüm var mı? Popüler bir paylaşılan barındırma hizmeti kullanıyorum, ancak planıma göre kontrol paneli erişimim yok.

** Görünüm önbelleğini temizlemek istiyorum. **

Neredeyse bununla aynı soru gördüm , ama bana yardımcı olmadı.


2
Laravel'i paylaşılan barındırmada çalıştırmak çılgınlık, IMO, tam da bu tür bir nedenden ötürü. Taşıma işlemlerini nasıl yürütüyorsunuz?
ceejayoz

@ceejayoz .. Aslında bu projeye yeni başladım ve benim de ilk laravel projem. Henüz bu göç
olayına gelmedim

11
"Laravel'i paylaşılan barındırmada çalıştırmak çılgınca" @ceejayoz ... Ama bu gerçek dünya. Bazen zorundasın çünkü başka seçenek yok.
elb98rm

2
@ elb98rm Digital Ocean'dan bir VPS, 5 $ / ay'dan başlıyor. Barındırma için ayda 5 ABD doları ödemek istemeyen bir müşteri için çalışmamak da dahil olmak üzere her zaman bir seçenek vardır.
ceejayoz

19
@ceejayoz Alakalı değil - genellikle para olmadığı, ilişkinin veya ev sahibinin ve iç politikanın olmadığı yerlerde çalıştım. Dahası - bazen tam anlamıyla tüm departmanınıza bağlı değildir. Gerçek dünya, bazen bir durumla çalışmanız gerektiği anlamına gelir. Başka birinin seçimleriyle çalışmak zorunda
kalmadıysan

Yanıtlar:


146

CLI dışında bir Artisan komutunu çağırabilirsiniz.

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

Resmi dokümanı buradan kontrol edebilirsiniz http://laravel.com/docs/5.0/artisan#calling-commands-outside-of-cli


Güncelleme

Görünüm önbelleğini silmenin bir yolu yoktur. Ne php artisan cache:clearbunu yapmaz.

Görünüm önbelleğini gerçekten temizlemek istiyorsanız, kendi artisankomutunuzu yazmanız ve daha önce söylediğim gibi çağırmanız gerektiğini veya artisanbir denetleyiciden veya rotadan çağırdığınız bir sınıfta yolu tamamen atlayıp görünüm önbelleğini temizlemeniz gerektiğini düşünüyorum.

Ama asıl sorum şu ki, görüntü önbelleğini gerçekten temizlemeniz gerekiyor mu? Şu anda üzerinde çalıştığım bir projede, neredeyse 100 önbelleğe alınmış görünümüm var ve ağırlıkları 1 Mb'den az, dizinim vendorise> 40 Mb. Önbelleği görüntülemenin disk kullanımında gerçek bir darboğaz olduğunu ve hiçbir zaman onu temizlemeye gerçekten ihtiyaç duymadığını düşünüyorum.

Uygulama önbelleğine gelince , storage/framework/cachedizinde saklanır , ancak yalnızca filesürücüyü içinde yapılandırdıysanız config/cache.php. Bir dosya tabanlı önbellek üzerinden performansları iyileştirmek için Redis veya Memcached gibi birçok farklı sürücü seçebilirsiniz .


1
Hangi önbelleği temizlemeye çalışıyorsunuz? cache:clearKomut ile çalışan uygulama önbelleği , erişilir biri Cachecephesi.
Marco Pallante

Görünüm önbelleğini temizlemek istiyorum, önbellek klasörüne kaydedilmiş çok sayıda sayfa var. Hedeflediği tüm dizinler olan uygulama önbelleği dediğinde bir soru daha var.
Rinto George

Açıklama için teşekkürler!. Disk alanı konusunda endişelenmiyorum :) Ama bir soru, eğer görüntü önbelleği temizlenmiyorsa, o zaman görünümdeki yeni değişikliklerin web sitesinde nasıl etkileneceği, laravel'de herhangi bir G / Ç kontrolü oluyor mu?
Rinto George

1
Sanırım dosyalar üzerinde bir zaman damgası kontrolü yapıyor, bu da blade şablonunu yeniden oluşturmaktan daha hızlı
Marco Pallante

Evet, sanırım öyle, neyse, doğru şekilde düşünmeme yardım ettin, teşekkürler!
Rinto George

61

Umarım bu birine yardımcı olur

Git daha laravelFolder/bootstrap/cachesonra config.phpistediğiniz herhangi bir şeye yeniden adlandırın örneğin. config.php_oldve sitenizi yeniden yükleyin. Bu vudu gibi çalışmalı.

Mutlu Kodlama ...


Onaylıyorum. Laravel 5.4'te çalışır. Yaylarım.
simon

1
Tek ve tek çözüm! Neden işe yaradığını merak ediyorsanız? sadece tanrı bilir
Luis Contreras

Windows'tan paylaşılan barındırmaya laravel 5.4 barındırırken, a ** daki acıyı sildiğini doğruladı .... TEŞEKKÜRLER !!!
Rikudo Pain

Görünüşe göre birkaç senaryoda, işe yarayan tek çözüm bu. Önbelleğe alınmış bir yapılandırmanız varsa ve ardından bir Cephe veya Hizmet Sağlayıcıyı kaldırırsanız, yeni önbelleğe alınmış yapılandırmayı oluşturmak için komutu çalıştırdığınızda, mevcut önbelleğe alınmış yapılandırmayı kullanarak çalışır ve Cephe ve / veya Hizmet Sağlayıcı sınıflarına başvurmaya çalışır. artık yok ve başarısız oluyor. Diğer seçenek, referansları yapılandırma dosyasından kaldırmak, önbelleğe alınmış yapılandırmanızı yeniden oluşturmak, ardından gerçek Facade ve / veya Hizmet Sağlayıcı sınıflarını kaldırmak olabilir.
Jason Wheeler

1
Laravel 6.6 için, önbelleği kaldırmak için, cacheklasörü ve .envdosya varsayılan önbellek değerini kaldırdım . Ama tüm bunları sildikten sonra tekrar sorun oluyor .. ne zaman php artisan optimize. Sonunda bu, sorunumu yeniden adlandırarak değil, config.php dosyasındaki anahtar değerini değiştirerek çözdü. Teşekkürler @DeadGuy
Chandan Sharma

49

Görebildiğim gibi: http://itsolutionstuff.com/post/laravel-5-clear-cache-from-route-view-config-and-all-cache-data-from-applicationexample.html

aşağıdaki kodu yeni önbellek temizle komutlarıyla kullanmak mümkün mü:

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

Önbellekleri herkese, özellikle de bir üretim ortamında temizleme imkanı vermek gerekli değildir, bu yüzden bu rotaları yorumlamayı ve gerektiğinde kodu yorumlamayı kaldırıp rotaları çalıştırmayı öneririm.


1
Bu pasajı çok yararlı buldum.
Haseeb Zulfiqar

Config ile sorunum var: cache, rotada veya denetleyicide çalışmıyor, ancak diğerleri çalıştı. sorun ne olurdu?
Nayeem

40

Yapılandırma önbelleğe alma Laravel yapılandırması düzinelerce dosyaya yayılır ve includingher istek için her biri maliyetli bir işlemdir. Tüm yapılandırma dosyalarınızı tek bir dosyada birleştirmek için şunu kullanın:

php artisan config:cache

Yapılandırmadaki herhangi bir değişikliğin, önbelleğe aldığınızda herhangi bir etkisi olmayacağını unutmayın. Yapılandırma önbelleğini yenilemek için yukarıdaki komutu tekrar çalıştırın. Yapılandırma önbelleğinden tamamen kurtulmak istemeniz durumunda,

php artisan config:clear

Rotaları önbelleğe alma Yönlendirme de laravel'de pahalı bir görevdir. Route.php dosyasını önbelleğe almak için aşağıdaki komutu çalıştırın:

php artisan route:cache

Kapanışlarla çalışmadığını unutmayın. Kapamalar kullanıyorsanız, bu, onları bir denetleyiciye taşımak için harika bir fırsattır, çünkü zanaatkar komut, uygun denetleyici yöntemleri yerine kapanışlara bağlı yolları derlemeye çalışırken bir istisna atacaktır. Yapılandırma önbelleğinde olduğu gibi, route.php'de yapılan herhangi bir değişikliğin artık hiçbir etkisi olmayacaktır. Önbelleği yenilemek için, rotalar dosyasında her değişiklik yaptığınızda yukarıdaki komutu çalıştırın. Yol önbelleğinden tamamen kurtulmak için aşağıdaki komutu çalıştırın:

php artisan route:clear

Sınıf haritası optimizasyonu

Orta ölçekli bir projenin yüzlerce PHP dosyasına yayılması alışılmadık bir durum değildir. İyi kodlama davranışları bizi dikte ettiği gibi, her şeyin kendi dosyası vardır. Bu, elbette, dezavantajları olmadan gelmez. Laravel, her istek için düzinelerce farklı dosya eklemelidir, bu da maliyetli bir şeydir.

Bu nedenle, iyi bir optimizasyon yöntemi, her istek için hangi dosyaların kullanıldığını bildirmektir (bu, örneğin, tüm hizmet sağlayıcılarınız, ara yazılımlarınız ve birkaç tane daha) ve bunları daha sonra her istek için yüklenecek olan tek bir dosyada birleştirmektir. Bu, tüm javascript dosyalarınızı tek bir dosyada birleştirmekten farklı değildir, bu nedenle tarayıcının sunucuya daha az istek yapması gerekecektir.

Ek derleme dosyaları (yine: servis sağlayıcılar, ara yazılımlar vb.) Sizin tarafınızdan config / compile.php dosyasında, dosyalar anahtarında bildirilmelidir. Uygulamanıza yapılan her istek için gerekli olan her şeyi oraya koyduktan sonra, bunları tek bir dosyada birleştirin:

php artisan optimize --force

Besteci otomatik yüklemesini optimize etme

Bu sadece laravel için değil, besteciden yararlanan herhangi bir uygulama için.

Önce PSR-4 otomatik yüklemesinin nasıl çalıştığını açıklayacağım ve ardından bunu optimize etmek için hangi komutu çalıştırmanız gerektiğini size göstereceğim. Bestecinin nasıl çalıştığını bilmek ilginizi çekmiyorsa, doğrudan konsol komutuna atlamanızı öneririm.

App\Controllers\AuthControllerBesteciye sınıfı sorduğunuzda, önce sınıf haritasında doğrudan bir ilişki arar. Sınıf haritası, sınıfların ve dosyaların 1'e 1 ilişkilendirmelerini içeren bir dizidir. Elbette, Login sınıfını ve bunun ilişkili dosyasını sınıf haritasına manuel olarak eklemediğiniz için, besteci devam edecek ve ad alanlarında arama yapacaktır. Uygulama, Laravel ile varsayılan olarak gelen ve app/klasörle ilişkilendirilen bir PSR-4 ad alanı olduğundan , besteci, PSR-4 sınıf adını temel dize işleme prosedürleri ile bir dosya adına dönüştürmeyi deneyecektir. Sonunda, şans eseri ad alanı klasöründe olması gereken App\Controllers\AuthControllerbir Controllers/klasörde bulunan AuthController.php dosyasında bulunması gerektiğini tahmin ediyor app/.

Tüm bu sıkı çalışma, yalnızca App\Controllers\AuthControllersınıfın app/Controllers/AuthController.phpdosyada var olduğunu anlamak için . Composer'ın tüm uygulamanızı taraması ve doğrudan 1'e 1 sınıf ve dosya ilişkilendirmeleri oluşturması için aşağıdaki komutu çalıştırın:

composer dumpautoload -o

Php artisan optimiz --force'u zaten çalıştırdıysanız, artık bunu çalıştırmanız gerekmediğini unutmayın. Optimize komutu zaten besteciye optimize edilmiş bir otomatik yükleme oluşturmasını söylediğinden.


30

Bu paket php ^ 7.0 ve ^ laravel5.5 içindir .

Bu paketi yalnızca bu amaç için oluşturduğum cronjob içinde kullanın . Ben de aynı durumla karşı karşıyaydım. https://packagist.org/packages/afrazahmad/clear-cached-data Kurun ve çalıştırın:

php artisan clear:data

ve aşağıdaki komutları otomatik olarak çalıştıracaktır

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

Umarım yardımcı olur.

Belirli bir zamanda otomatik olarak çalıştırmak istiyorsanız, önce crnjob'u kurmanız gerekecektir. Örneğin

 in app/console/kernel.php

Program fonksiyonunda:

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

17

Temel olarak görünüm önbelleğini temizlemek istiyorum.

Laravel 5.1'de bunun için artık bir komut var

php artisan view:clear

9

FTP yoluyla bağlanabilir ve storage\framework\viewsiçin laravel 5veya app\storage\viewsiçin klasörü temizleyebilirsiniz laravel 4.


6

CLI dışındaki tüm önbelleği temizlemek için , Bunu yapın; Bu benim için çalışıyor.

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

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

   return "Cleared!";

});

config:cacheYapılandırmayı temizleyecek ve önbelleğe alacak - bu yüzden ikisini birden eklemeye gerek yok
Raja Khoury

Elbette. sadece ihtiyacınız olan hattı kullanın.
Amos Chihi

4
php artisan view:clear

önbelleğe alınmış görünümleri temizleyecek


Komutun alternatifi php artisan cache:clear sorulur. Bu, depolama klasöründe depolanan görüntülenen önbelleği temizlemeyecek, tam olarak ihtiyaç duyulan şey budur.
Spidi

2

Eğer kullanıyorsanız bunu yapabilirsiniz Lumendan Laravelsenin üzerine routes/web.phpdosyanın:

use Illuminate\Support\Facades\Artisan;

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

2

Hızlı komutları kopyalayıp oluşturucuya yapıştırmak için bu sayfayı birkaç kez kullandım, bu yüzden bu komutları tek bir zanaatkar komutunda yapan bir komut yazdım.

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

        }
    }
}

Yerleştirmek app\Console\Commands\Admin klasörüne

ardından composer'da komutu çalıştırın php artisan traqza:clear-everything

Mutlu kodlamalar.

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


1

Bunu, Francesco cevabına benzer şekilde, yönlendirici aracılığıyla da yapabilirsiniz, ancak yönlendirici yapılandırmasında daha az dağınıklıkla

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

Ardından http: //myapp.test/artisan/cache-clear vb. Adresini ziyaret ederek bunları çalıştırın. Geçerli Artisan komutlarını eklemeniz / düzenlemeniz gerekiyorsa, $ validCommands dizisini güncellemeniz yeterlidir.


1

Bu benim için çalıştı. Projenizde şu konuma gidin: depolama> çerçeve> görünümler. Oradaki tüm dosyaları silin ve sayfanızı yenileyin.



0

Paylaşılan barındırmada bir laravel uygulaması çalıştırma fikrine kesinlikle katılmıyorum (her yerde kötü bir fikir), bu paket muhtemelen sorununuzu çözecektir. Web'den bazı esnaf komutlarını çalıştırmanıza izin veren bir pakettir. Mükemmel olmaktan uzak, ancak bazı kullanım durumlarında işe yarayabilir.

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



0

Bunun için daha verimli yaklaşımın, paylaşılan sunucu yönetici panelindeki cron job modülünü kullanarak, daha sonra yapılandırılmış artisan komutunu çağıracak olan laravel scheduler komutunu çalıştırmak olduğuna inanıyorum, bunun gibi bir şey işi yapmalı:

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

Cron zamanlayıcı kurulumla, düzenleyebilir zamanlama yöntemini de \ App \ Konsol \ Kernel.php böyle sağ esnaf komutu, bir şeyler aramaya:

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

Komutlar çalıştırıldıktan sonra her zaman yukarıdaki satırları silebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.