Фреймворк Laravel 5 - очистить кэш на хостинге
вопрос довольно ясен.
php artisan cache:clear
есть ли какая-либо работа вокруг, чтобы очистить кэш, как Выше мы используем в CLI. Я использую известный общий хостинг, но в соответствии с моим планом у меня нет доступа к панели управления.
в основном я хочу очистить кэш представлений.
Я видел вопрос почти такой же как этот, но это не помогает мне.
спасибо заранее.
12 ответов:
вы можете вызвать команду ремесленника за пределами 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 Мб. Я не думаю, что просмотр кэша является реальным узким местом в использовании диска и никогда не было реальной необходимости, чтобы очистить его.Что касается кэш приложения, хранится в
можно ли использовать приведенный ниже код с новыми командами clear cache:
//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>'; });
Не обязательно давать возможность очистить кэши всем, особенно в производственной среде, поэтому я предлагаю комментировать эти маршруты и, когда это необходимо, де-комментировать код и запускать маршруты.
конфигурация кэширования Конфигурация laravel распространяется на десятки файлов, и
including
каждый из них для каждого запроса является дорогостоящим процессом. Чтобы объединить все ваши конфигурационные файлы в один, использовать:php artisan config:cache
имейте в виду, что любые изменения в конфиге не будет иметь никакого эффекта после кэширования. Чтобы обновить кэш конфигурации, выполните приведенную выше команду еще раз. Если вы хотите полностью избавиться от кэша конфигурации, запустите
php artisan config:clear
маршруты кэширование Маршрутизация также является дорогостоящей задачей в laravel. Для кэширования маршрутов.php-файл выполните следующую команду:
php artisan route:cache
имейте в виду, что он не работает с закрытиями. В случае, если вы используете замыкания, это отличный шанс переместить их в контроллер, так как команда artisan выдаст исключение при попытке скомпилировать маршруты, которые привязаны к замыканиям, а не к соответствующим методам контроллера. В том же, что и в кэше конфигурации, любые изменения маршрутов.PHP не будет иметь никакого эффекта больше. Чтобы обновить кэш, выполните приведенную выше команду каждый раз, когда вы вносите изменения в файл маршрутов. Чтобы полностью избавиться от кэша маршрутов, выполните следующую команду:
php artisan route:clear
оптимизация Classmap
это не редкость для среднего проекта, который будет распространяться на сотни файлов PHP. Поскольку хорошее поведение кодирования диктует нам, у всего есть свой собственный файл. Это, конечно, не обходится без недостатков. Laravel должен включать в себя десятки разные файлы для каждого запроса,что является дорогостоящей вещью.
следовательно, хорошим методом оптимизации является объявление, какие файлы используются для каждого запроса (это, например, все ваши поставщики услуг, middlewares и еще несколько) и объединение их только в один файл, который впоследствии будет загружен для каждого запроса. Это не отличается от объединения всех ваших файлов javascript в один, поэтому браузеру придется делать меньше запросов к серверу.
в дополнительные компилируемые файлы (опять же: поставщики услуг, промежуточные программы и т. д.) должны быть объявлены вами в config/compile.php, в ключе файлов. Как только вы поместите туда все необходимое для каждого запроса, сделанного в ваше приложение, объедините их в один файл с помощью:
php artisan optimize --force
оптимизация автоматической загрузки композитора
это не только для laravel, но и для любого приложения, которое использует composer.
я объясню сначала, как PSR-4 autoload работает, а затем я покажу вам, какую команду вы должны запустить, чтобы оптимизировать его. Если вам не интересно знать, как работает composer, я рекомендую вам перейти непосредственно к консольной команде.
когда вы просите композитора для
App\Controllers\AuthController
класс, он сначала ищет прямую ассоциацию в classmap. Classmap-это массив с 1-к-1 ассоциациями классов и файлов. Поскольку, конечно же, вы не добавили вручную класс Login и связанный с ним файл в classmap, композитор будет двигаться дальше и искать в пространствах имен. Потому что приложение-это пространство имен PSR-4, которое по умолчанию поставляется с Laravel и связано сapp/
папка, композитор попытается преобразовать имя класса PSR-4 в имя файла с помощью основных процедур обработки строк. В конце концов, он догадывается, чтоApp\Controllers\AuthController
должен быть расположен в AuthController.php-файл, который находится вControllers/
папка, которая, к счастью, должна быть в папке пространства имен, котораяapp/
.вся эта тяжелая работа только чтобы получить что
App\Controllers\AuthController
класс существует в . Чтобы composer сканировал все ваше приложение и создавал прямые ассоциации классов и файлов 1-к-1, выполните следующую команду:composer dumpautoload -o
имейте в виду, что если вы уже запустили php artisan optimize --force, вам больше не нужно запускать этот. Поскольку оптимизировать команду, уже говорит композитор, чтобы создать оптимизирована Автозагрузка.
надеюсь, это кому-то поможет
на
laravelFolder/bootstrap/cache
переименоватьconfig.php
все, что вы хотите, например.config.php_old
и перезагрузите свой сайт. Это должно работать как вуду.Удачи В Кодировании...
в основном я хочу очистить кэш представлений.
теперь есть команда в Laravel 5.1 для этого
php artisan view:clear
этот пакет предназначен для 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');
вы можете сделать это, если вы используете
Lumen
СLaravel
наroutes/web.php
file:use Illuminate\Support\Facades\Artisan; $app->get('/clear-cache', function () { $code = Artisan::call('cache:clear'); return 'cache cleared'; });
вы также можете сделать это через маршрутизатор, подобно Francesco answer, но с меньшим количеством помех в конфигурации маршрутизатора
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.
хотя я категорически не согласен с идеей запуска приложения laravel на общем хостинге (плохая идея), этот пакет, вероятно, решит вашу проблему. Это пакет, который позволяет запускать некоторые команды artisan из интернета. Это далеко не идеально, но может работать для некоторых usecases.