Laravel 5 – 공유 호스팅 서버에서 캐시 지우기


125

질문은 아주 분명합니다.

php artisan cache:clear

CLI에서 사용하는 위와 같이 캐시를 지우는 해결 방법이 있습니까? 인기있는 공유 호스팅 서비스를 사용하고 있지만 내 계획에 따라 제어판 액세스 권한이 없습니다.

** 뷰 캐시를 지우고 싶습니다. **

나는 이것과 거의 같은 질문을 보았지만 도움이되지 않습니다.


2
공유 호스팅에서 Laravel을 실행하는 것은 정확히 이런 종류의 이유 때문에 IMO입니다. 마이그레이션을 어떻게 실행하고 있습니까?
ceejayoz

@ceejayoz .. 사실 방금이 프로젝트를 시작했고 첫 번째 laravel 프로젝트도 시작했습니다. 나는 .. 아직 마이그레이션 일에 오지 않았다
Rinto 조지에게

11
"공유 호스팅에서 Laravel을 실행하는 것은 미친 짓입니다"@ceejayoz ... 그러나 이것은 현실 세계입니다. 선택의 여지가 없기 때문에 때로는해야합니다.
elb98rm

2
@ elb98rm Digital Ocean의 VPS는 월 $ 5부터 시작합니다. 호스팅 비용으로 월 $ 5를 지불하지 않으려는 고객을 위해 일하지 않는 것을 포함하여 항상 선택의 여지가 있습니다.
ceejayoz

19
@ceejayoz 관련 없음-종종 돈이 아닌 관계, 사회자 및 내부 정치인 곳에서 일했습니다. 또한-때로는 말 그대로 전체 부서에 달려 있지 않습니다. 현실 세계는 때때로 상황을 처리해야 함을 의미합니다. 당신은 ... 운이 또는 다른 사람의 선택과 함께 작업을 한 적이 없다면 숨겨있어
elb98rm

답변:


146

CLI 외부에서 Artisan 명령을 호출 할 수 있습니다.

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 개의 캐시 된 뷰가 있고 가중치는 1Mb 미만 vendor이며 디렉토리는 40Mb를 초과 합니다. 저는 뷰 캐시가 디스크 사용에있어 실제 병목 현상이 아니라고 생각하지 않습니다.

에 관해서는 응용 프로그램 캐시 , 그것은에 저장되어있는 storage/framework/cache디렉토리,하지만 당신은 구성된 경우에만 file에서 드라이버를 config/cache.php. Redis 또는 Memcached 와 같은 다양한 드라이버를 선택 하여 파일 기반 캐시의 성능을 향상시킬 수 있습니다.


1
어떤 캐시 를 지우려고합니까? 이 cache:clear명령은 파사드 에서 액세스되는 애플리케이션 캐시 와 함께 작동합니다 Cache.
Marco Pallante 2015

보기 캐시를 지우고 싶습니다.보기 캐시 폴더에 저장된 페이지가 많이 있습니다. 한 가지 더 질문은 응용 프로그램 캐시가 대상으로하는 모든 디렉터리입니다.
Rinto 조지

설명해 주셔서 감사합니다!. 나는 디스크 공간에 대해 걱정하지 않는다 :) 그러나 뷰 캐시가 지워지지 않으면 뷰의 새로운 변경 사항이 웹 사이트에 어떻게 영향을 미치는지 한 가지 질문은 laravel에서 발생하는 I / O 검사입니까?
Rinto 조지

1
나는 빨리 블레이드 템플릿 재건보다 파일을 검사하는 타임 스탬프 않는 생각
마르코 Pallante을

그래, 어쨌든 당신은 내가 올바른 방식으로 생각하도록 도와 주셨 나봐요, 감사합니다!
Rinto George

61

나는 이것이 누군가에게 도움이되기를 바랍니다.

laravelFolder/bootstrap/cache다음으로 이동하여 config.php원하는 이름 으로 변경하십시오 . config.php_old사이트를 새로 고침하세요. 부두교처럼 작동합니다.

해피 코딩 ...


확인합니다. laravel 5.4에서 작동합니다. 절.
사이먼

1
유일한 솔루션! 왜 작동하는지 궁금하다면? 오직 하나님 만 알고
루이스 콘트레라스에게

Windows에서 공유 호스팅으로 laravel 5.4를 호스팅하는 동안 a **에서 고통을 없애는 것을 확인했습니다 .... 감사합니다 !!!
Rikudo Pain

몇 가지 시나리오에서 이것이 작동하는 유일한 솔루션 인 것 같습니다. 캐시 된 구성이있는 경우 Facade 또는 서비스 공급자를 제거하는 경우 새 캐시 된 구성을 만드는 명령을 실행할 때 기존의 캐시 된 구성을 사용하여 실행되고 다음과 같은 Facade 및 / 또는 서비스 공급자 클래스를 참조하려고합니다. 더 이상 존재하지 않고 실패합니다. 다른 옵션은 구성 파일에서 참조를 제거하고 캐시 된 구성을 다시 생성 한 다음 실제 Facade 및 / 또는 서비스 공급자 클래스를 제거하는 것입니다.
제이슨 휠러

1
Laravel 6.6의 경우 캐싱을 제거하기 위해 방금 cache폴더 및 .env파일 기본 캐시 값을 제거했습니다 . 그러나이 모든 문제를 다시 삭제 한 후 .. 때 php artisan optimize. 마지막으로 이것은 이름을 바꾸지 않고 config.php 파일의 키 값을 변경하여 내 문제를 해결했습니다. 감사 @DeadGuy
이것을 Chandan 샤르마

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 Zulfiqar 2017

config : cache에 문제가 있습니다. 경로 또는 컨트롤러에서 작동하지 않지만 다른 것들은 작동합니다. 무엇이 문제일까요?
Nayeem

40

구성 캐싱 laravel 구성은 수십 개의 파일에 분산되어 있으며 including각 요청에 대한 모든 파일 은 비용이 많이 드는 프로세스입니다. 모든 구성 파일을 하나로 결합하려면 다음을 사용하십시오.

php artisan config:cache

구성에 대한 변경 사항은 캐시 한 후에는 영향을 미치지 않습니다. 구성 캐시를 새로 고치려면 위의 명령을 다시 실행하십시오. 구성 캐시를 완전히 제거하려면 다음을 실행하십시오.

php artisan config:clear

경로 캐싱 라우팅은 또한 laravel에서 비용이 많이 드는 작업입니다. route.php 파일을 캐시하려면 아래 명령을 실행하십시오.

php artisan route:cache

클로저에서는 작동하지 않습니다. 클로저를 사용하는 경우 적절한 컨트롤러 메서드 대신 클로저에 바인딩 된 라우트를 컴파일하려고 할 때 artisan 명령이 예외를 throw하므로 클로저를 컨트롤러로 이동할 수있는 좋은 기회입니다. 설정 캐시와 동일하게, route.php에 대한 변경 사항은 더 이상 영향을 미치지 않습니다. 캐시를 새로 고치려면 경로 파일을 변경할 때마다 위의 명령을 실행하십시오. 경로 캐시를 완전히 제거하려면 아래 명령을 실행하십시오.

php artisan route:clear

클래스 맵 최적화

중간 규모의 프로젝트가 수백 개의 PHP 파일에 퍼지는 것은 드문 일이 아닙니다. 좋은 코딩 행동이 우리를 지시하기 때문에 모든 것이 자체 파일을 가지고 있습니다. 물론 이것은 단점없이 오지 않습니다. Laravel은 각 요청에 대해 수십 개의 서로 다른 파일을 포함해야하므로 비용이 많이 듭니다.

따라서 좋은 최적화 방법은 모든 요청에 ​​사용되는 파일 (예 : 모든 서비스 제공 업체, 미들웨어 등)을 선언하고이를 하나의 파일로 결합하여 나중에 각 요청에 대해로드되는 것입니다. 이것은 모든 자바 스크립트 파일을 하나로 결합하는 것과 다르지 않으므로 브라우저는 서버에 대한 요청을 줄여야합니다.

추가 컴파일 파일 (다시 말하면 서비스 제공 업체, 미들웨어 등)은 config / compile.php의 파일 키에 선언해야합니다. 앱에 대한 모든 요청에 ​​필요한 모든 것을 여기에 넣으면 다음을 사용하여 하나의 파일에 연결합니다.

php artisan optimize --force

작곡가 자동로드 최적화

이것은 laravel뿐만 아니라 composer를 사용하는 모든 응용 프로그램을위한 것입니다.

먼저 PSR-4 자동로드가 어떻게 작동하는지 설명한 다음이를 최적화하기 위해 어떤 명령을 실행해야하는지 보여 드리겠습니다. 작곡가가 어떻게 작동하는지에 관심이 없다면 콘솔 명령으로 바로 이동하는 것이 좋습니다.

composer에게 App\Controllers\AuthController클래스 를 요청 하면 먼저 클래스 맵에서 직접 연관을 검색합니다. 클래스 맵은 클래스와 파일이 일대일로 연결된 배열입니다. 물론 Login 클래스와 관련 파일을 클래스 맵에 수동으로 추가하지 않았기 때문에 composer는 네임 스페이스에서 이동하여 검색합니다. App은 기본적으로 Laravel과 함께 제공되고 app/폴더에 연결되는 PSR-4 네임 스페이스이므로 composer는 기본 문자열 조작 절차를 사용하여 PSR-4 클래스 이름을 파일 이름으로 변환하려고합니다. 결국 App\Controllers\AuthControllerAuthController.php 파일에 있어야 한다고 추측 합니다.이 파일 Controllers/은 운 좋게도 네임 스페이스 폴더 인 app/.

이 모든 노력은 App\Controllers\AuthController클래스가 app/Controllers/AuthController.php파일에 존재 하는지 확인하는 것 입니다. composer가 전체 애플리케이션을 스캔하고 클래스 및 파일의 직접적인 일대일 연결을 만들려면 다음 명령을 실행합니다.

composer dumpautoload -o

이미 php artisan optimize --force를 실행했다면 더 이상 실행할 필요가 없습니다. 최적화 명령은 이미 composer에게 최적화 된 자동로드를 생성하도록 지시하기 때문입니다.


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 5app\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취소 및 캐시 설정한다 - 내가 모두 추가 할 필요가 없다 생각 때문에
라자 쿠리

확실한. 필요한 라인 만 사용하면됩니다.
아모스 Chihi

4
php artisan view:clear

캐시 된 뷰를 지 웁니다.


명령에 대한 대안 php artisan cache:clear 이 요청됩니다. 이것은 정확히 필요한 스토리지 폴더에 저장된 본 캐시를 지우지 않습니다.
Spidi

2

파일 Lumen에서 from Laravel을 사용 하는 경우 이렇게 할 수 있습니다 routes/web.php.

use Illuminate\Support\Facades\Artisan;

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

1

Francesco 답변과 비슷하지만 라우터 구성이 덜 복잡하게 라우터를 통해 할 수 있습니다.

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폴더

그런 다음 composer에서 명령을 실행하십시오. php artisan traqza:clear-everything

즐거운 코딩입니다.

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


0

공유 호스팅에서 laravel 앱을 실행한다는 생각에 강력히 동의하지 않지만 (모든 주변에서 나쁜 생각)이 패키지가 문제를 해결할 가능성이 높습니다. 웹에서 몇 가지 장인 명령을 실행할 수있는 패키지입니다. 완벽하지는 않지만 일부 사용 사례에서는 작동 할 수 있습니다.

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



0

이에 대한보다 효율적인 접근 방식은 공유 서버 관리자 패널의 cron 작업 모듈을 사용하여 구성된 artisan 명령을 차례로 호출하는 laravel 스케줄러 명령을 실행하는 것입니다. 다음과 같이 작업을 수행해야합니다.

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

명령을 실행 한 후에는 항상 위의 줄을 삭제할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.