Laravel 5 - Очистити кеш на сервері спільного хостингу


125

Питання досить чітке.

php artisan cache:clear

Чи є якесь вирішення способу очищення кешу, як описано вище у CLI. Я використовую популярну службу спільного хостингу, але, згідно з моїм планом, у мене немає доступу до панелі управління.

** Я хочу очистити кеш переглядів **.

Я побачив а питання майже таке ж, як це, але воно мені не допомагає.


2
Запуск Laravel на спільному хостингу є безумним, IMO, саме з цієї причини. Як ви проводите міграцію?
ceejayoz

@ceejayoz .. Насправді я тільки почав цей проект, і його перший проект Laravel. Я ще не прийшов на цю міграційну річ ..
Рінто Джордж

11
"Запуск Laravel на спільному хостингу божевільний" @ceejayoz ... Але це справжній світ. Іноді доводиться це робити, тому що вибору немає.
elb98rm

2
@ elb98rm 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 Мб, тоді як мій vendorкаталог> 40 Мб. Я не думаю, що кеш перегляду - це справжнє вузьке місце у використанні диска, і ніколи не було реальної потреби його очищати.

Що стосується кешу додатків , він зберігається в storage/framework/cacheкаталозі, але тільки якщо ви налаштували fileдрайвер в config/cache.php. Ви можете вибрати безліч різних драйверів, таких як Redis або Memcached , для поліпшення продуктивності над файловим кешем.


1
Який кеш ви намагаєтеся очистити? cache:clearКоманда працює з кешем додатки , той, до якого звертаються з Cacheфасаду.
Марко Палланте

Я хочу очистити кеш перегляду, у папці кешу перегляду збережено багато сторінок. Ще одне питання, коли говорить кеш програм, які всі каталоги, на які він націлений.
Рінто Джордж

Дякую за пояснення !. Мене не турбують місця на диску на дисках :) Але одне питання, якщо кеш перегляду не очищає, то як нові зміни в огляді впливають на веб-сайт, чи є якась перевірка вводу-виводу в laravel?
Рінто Джордж

1
Я думаю, що це перевірка часових позначок на файлах, що швидше, ніж відновлення шаблону леза
Marco Pallante,

Так, мабуть, так, все одно ви допомогли мені думати правильно, дякую!
Рінто Джордж

61

Я сподіваюся, що це комусь допоможе

Перейдіть, laravelFolder/bootstrap/cacheа потім перейменуйте config.phpвсе, що завгодно, наприклад. config.php_oldта перезавантажте свій сайт. Це повинно працювати як вуду.

Щасливе кодування ...


Я підтверджую. Працює в laravel 5.4. Мені кланяються.
симон

1
Єдине рішення! Якщо вам цікаво, чому працює? єдиний бог знає
Луїс Контрерас

Підтверджено, що витирає біль у ** під час розміщення laravel 5.4 з Windows на спільний хостинг .... ДЯКУЮ !!!
Рікудо Біль

Здається, що в кількох сценаріях це єдине рішення, яке працює. Якщо у вас є кешована конфігурація, а потім ви видаляєте фасад або постачальник послуг, під час запуску команди для створення нового кешованого конфігурації він запускається за допомогою наявного кешованого конфігурації і намагається посилатися на класи фасаду та / або постачальника послуг, які більше не існує і провалюється. Іншим варіантом буде видалення посилань з конфігураційного файлу, відновлення кешованої конфігурації, а потім видалення фактичних класів фасаду та / або постачальника послуг.
Джейсон Уілер

1
Для Laravel 6.6, щоб видалити кешування, я щойно видалив cacheпапку та .envзначення кешу у файлі за замовчуванням. Але після видалення всього цього знову виникає проблема .. коли php artisan optimize. Нарешті, це вирішило мою проблему, не перейменувавшись, а змінивши значення ключа у файлі config.php. Дякую @DeadGuy
Шарма

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
Я вважав цей фрагмент найбільш корисним.
Хазеб Зульфікар

У мене проблема з config: кеш не працює в маршрутизаторі або контролері, але працюють інші. яка б була проблема?
Найєм

40

Налаштувати кешування Конфігурація laravel поширюється на десятки файлів, і includingкожен з них для кожного запиту є дорогим процесом. Щоб об'єднати всі конфігураційні файли в один, використовуйте:

php artisan config:cache

Майте на увазі, що будь-які зміни конфігурації не матимуть жодного ефекту після його кешування. Щоб оновити кеш конфігурації, запустіть вищезгадану команду ще раз. Якщо ви хочете повністю позбутися кеш-конфігурації, запустіть

php artisan config:clear

Маршрутизація кешування маршрутизації - також дороге завдання в laravel. Щоб кешувати файл route.php, виконайте команду нижче:

php artisan route:cache

Майте на увазі, що це не працює із закриттями. Якщо ви використовуєте закриття, це великий шанс перемістити їх у контролер, оскільки команда ремісників викине виняток при спробі компілювати маршрути, прив’язані до закриття замість правильних методів контролера. Так само, як кеш конфігурацій, будь-які зміни в route.php більше не матимуть ніякого ефекту. Щоб оновити кеш, запускайте вищевказану команду щоразу, коли ви змінюєте файл маршрутів. Щоб повністю позбутися кешу маршруту, виконайте команду нижче:

php artisan route:clear

Оптимізація класових зображень

Не рідкість середній розмір проекту поширюється на сотні файлів PHP. Оскільки хороша поведінка кодування нас диктує, все має свій файл. Це, звичайно, не обходиться без недоліків. Для кожного запиту Laravel повинен включати десятки різних файлів, що робити дорого.

Отже, хорошим методом оптимізації є оголошення файлів, які використовуються для кожного запиту (це, наприклад, всі ваші постачальники послуг, середнього рівня та ще декількох) та поєднання їх у одному файлі, який згодом буде завантажений для кожного запиту. Це не відрізняється від об'єднання всіх ваших файлів javascript в один, тому браузеру доведеться робити менше запитів до сервера.

Додаткові файли компіляції (знову ж таки: постачальники послуг, середній простір тощо) повинні бути оголошені вами у config / compile.php, у ключі файлів. Як тільки ви помістите туди все необхідне для кожного запиту, зробленого до вашої програми, об'єднайте їх в один файл із:

php artisan optimize --force

Оптимізація автозавантаження композитора

Цей не тільки для laravel, але і для будь-якого додатка, який використовує композитор.

Спочатку я поясню, як працює автоматичне завантаження PSR-4, а потім покажу вам, яку команду слід виконати для її оптимізації. Якщо вам не цікаво знати, як працює композитор, рекомендую перейти безпосередньо до консольної команди.

Коли ви запитуєте композитора для App\Controllers\AuthControllerкласу, він спочатку шукає пряму асоціацію в класі. Клас-карта - це масив з асоціаціями класів і файлів 1-1-1. Оскільки, звичайно, ви вручну не додавали клас входу та пов'язаний з ним файл до класової карти, композитор рухатиметься далі та шукатиме в просторах імен. Оскільки додаток - це простір імен PSR-4, який за замовчуванням поставляється з Laravel і пов'язаний з app/папкою, композитор спробує перетворити ім'я класу PSR-4 в ім'я файлу за допомогою основних процедур маніпуляції з рядками. Зрештою, він здогадується, що він App\Controllers\AuthControllerповинен бути розміщений у файлі AuthController.php, який знаходиться у Controllers/папці, яка, на щастя, повинна знаходитись у папці простору імен, яка є app/.

Вся ця важка робота лише для того, щоб домогтися того, що App\Controllers\AuthControllerклас існує у app/Controllers/AuthController.phpфайлі. Для того, щоб композитор сканував всю вашу програму і створив прямі асоціації класів і файлів 1-1-1, виконайте таку команду:

composer dumpautoload -o

Майте на увазі, що якщо ви вже працювали з php artisan optimize --force, вам більше не доведеться запускати цю. Оскільки команда optimize вже вказує композитору створити оптимізоване автозавантаження.


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 5або app\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

впевнений. ви просто використовуєте потрібну лінію.
Амос Чіхі

4
php artisan view:clear

очистить кешовані подання


Запрошується альтернатива команді php artisan cache:clear . Цей звичайний кеш-пам'ять, який явно переглядаю, зберігається в папці зберігання, що саме те, що потрібно.
Спіді

2

Це можна зробити, якщо ви використовуєте Lumenз 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

На цій сторінці кілька разів скопіювали та вставили швидкі команди в композитор, тому я написав команду, яка виконує ці команди в одній єдиній команді ремісників.

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


0

Хоча я категорично не згоден з ідеєю запустити додаток laravel на спільному хостингу (погана ідея навколо), цей пакет, ймовірно, вирішить вашу проблему. Це пакет, який дозволяє запускати деякі майстерні команди з Інтернету. Це далеко не ідеально, але може працювати для деяких випадків використання.

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



0

Я вважаю, що більш ефективним підходом до цього є використання модуля завдання cron на панелі адміністратора спільного сервера для запуску команди планувальника laravel, яка в свою чергу викликає налаштовану команду ремісників, щось подібне повинно виконувати цю роботу:

* * * * * /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();

Ви завжди можете видалити рядки вище після виконання команд

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.