Laravel 5 - очистить кеш на общем сервере хостинга


125

Вопрос довольно ясный.

php artisan cache:clear

Есть ли обходной путь для очистки кеша, как указано выше, мы используем в CLI. Я использую популярную службу виртуального хостинга, но согласно моему тарифному плану у меня нет доступа к панели управления.

** Я хочу очистить кеш просмотров. **

Я видел вопрос почти такой же, но мне это не помогает.


2
Запуск Laravel на виртуальном хостинге безумие, ИМО, именно по этой причине. Как вы выполняете миграции?
ceejayoz

@ceejayoz .. На самом деле я только начал этот проект, и это мой первый проект laravel. Я еще не приходил к этой
проблеме

11
«Запуск Laravel на виртуальном хостинге - безумие» @ceejayoz ... Но это реальный мир. Иногда приходится, потому что выбора нет.
elb98rm 01

2
@ elb98rm Стоимость VPS от Digital Ocean начинается с 5 долларов в месяц. Всегда есть выбор, в том числе отказ от работы для клиента, который не желает платить 5 долларов в месяц за хостинг.
ceejayoz 01

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
Я думаю, что он проверяет временные метки файлов, что быстрее, чем восстановление шаблона лезвия,
Марко Палланте

Да, наверное, да, в любом случае, вы помогли мне думать правильно, спасибо!
Ринто Джордж

61

Я надеюсь, что это поможет кому-то

Зайдите, laravelFolder/bootstrap/cacheзатем переименуйте config.phpво что угодно, например.config.php_oldи перезагрузите свой сайт. Это должно работать как вуду.

Удачного кодирования ...


Я подтверждаю. Работает в laravel 5.4. Я кланяюсь.
симон

1
Единственное решение! Если вам интересно, почему работает? только бог знает
Луис Контрерас

Подтверждено, что это стирает боль в ** при хостинге laravel 5.4 от Windows до общего хостинга .... СПАСИБО !!!
Rikudo Pain

Похоже, что в некоторых случаях это единственное решение, которое работает. Если у вас есть кэшированная конфигурация, а затем вы удаляете фасад или поставщика услуг, когда вы запускаете команду для создания новой кэшированной конфигурации, она запускается с использованием существующей кэшированной конфигурации и пытается ссылаться на классы фасадов и / или поставщиков услуг, которые больше не существует и терпит неудачу. Другой вариант - удалить ссылки из файла конфигурации, повторно создать кешированную конфигурацию, а затем удалить фактические классы Facade и / или Service Provider.
Джейсон Уиллер

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
Я нашел этот фрагмент очень полезным.
Haseeb Зульфикар

У меня проблема с конфигурацией: кеш не работает в маршруте или контроллере, но другие работают. в чем будет проблема?
Наим,

40

Кэширование конфигурации Конфигурация laravel распространяется на десятки файлов, и includingкаждый из них для каждого запроса - дорогостоящий процесс. Чтобы объединить все ваши файлы конфигурации в один, используйте:

php artisan config:cache

Имейте в виду, что любые изменения в конфигурации не будут иметь никакого эффекта после кеширования. Чтобы обновить кеш конфигурации, снова запустите указанную выше команду. Если вы хотите полностью избавиться от кеша конфигурации, запустите

php artisan config:clear

Кэширование маршрутов В laravel маршрутизация - тоже дорогостоящая задача. Чтобы кэшировать файл routes.php, выполните следующую команду:

php artisan route:cache

Имейте в виду, что это не работает с замыканиями. Если вы используете замыкания, это отличный шанс переместить их в контроллер, поскольку команда artisan выдаст исключение при попытке скомпилировать маршруты, которые привязаны к замыканиям, вместо правильных методов контроллера. Как и в кеше конфигурации, любые изменения в routes.php больше не будут иметь никакого эффекта. Чтобы обновить кеш, запускайте указанную выше команду каждый раз, когда вы вносите изменения в файл маршрутов. Чтобы полностью избавиться от кеша маршрута, выполните следующую команду:

php artisan route:clear

Оптимизация карты классов

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

Следовательно, хороший метод оптимизации состоит в том, чтобы объявлять, какие файлы используются для каждого запроса (это, например, все ваши поставщики услуг, промежуточное программное обеспечение и некоторые другие), и объединять их только в один файл, который впоследствии будет загружаться для каждого запроса. Это не отличается от объединения всех ваших файлов javascript в один, поэтому браузеру придется делать меньше запросов к серверу.

Дополнительные файлы компиляции (опять же: поставщики услуг, промежуточное ПО и т. Д.) Должны быть объявлены вами в config / compile.php в ключе files. После того, как вы поместите туда все необходимое для каждого запроса к вашему приложению, объедините их в один файл с помощью:

php artisan optimize --force

Оптимизация автозагрузки композитора

Это не только для laravel, но и для любого приложения, использующего composer.

Сначала я объясню, как работает автозагрузка PSR-4, а затем покажу вам, какую команду следует выполнить для ее оптимизации. Если вам не интересно знать, как работает композитор, я рекомендую вам перейти непосредственно к консольной команде.

Когда вы спрашиваете композитора о App\Controllers\AuthControllerклассе, он сначала ищет прямую связь в карте классов. Карта классов - это массив с однозначными ассоциациями классов и файлов. Поскольку, конечно же, вы не добавляли вручную класс Login и связанный с ним файл в карту классов, композитор перейдет к поиску в пространствах имен. Поскольку App является пространством имен PSR-4, которое по умолчанию поставляется с Laravel и связано с app/папкой, композитор попытается преобразовать имя класса PSR-4 в имя файла с помощью основных процедур обработки строк. В конце концов, он догадывается, что он App\Controllers\AuthControllerдолжен находиться в файле AuthController.php, который находится в Controllers/папке, которая, к счастью, должна находиться в папке пространства имен, то естьapp/ .

Вся эта тяжелая работа только для того, чтобы убедиться, что App\Controllers\AuthControllerкласс существует в app/Controllers/AuthController.phpфайле. Чтобы композитор сканировал все ваше приложение и создавал прямые однозначные ассоциации классов и файлов, выполните следующую команду:

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очистит и кеширует конфигурацию - так что я думаю, нет необходимости добавлять оба
Раджа Хури

конечно. вы просто используете нужную строку.
Амос

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

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

Несколько раз использовал эту страницу для копирования и вставки быстрых команд в composer, поэтому я написал команду, которая выполняет эти команды в одной команде artisan.

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, которая, в свою очередь, вызовет настроенную команду artisan, что-то вроде этого должно выполнить задание:

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

При настройке планировщика в cron вы можете отредактировать метод расписания в \ App \ Console \ Kernel.php, чтобы вызвать нужную команду artisan, примерно так:

$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.