RJ-87
RJ-87

Reputation: 31

Laravel 5.1: Class cache does not exist

Hello dear providers of many anwsers to many questions!

I'm using SO for a while now (5 years+), although mostly passively. This time i've got a problem which is keeping me up all night and not being able to solve it.

Here is what it is all about. I'm using Laravel 5.1 in combination with Redis (cache & session). Sadly when i switched to nginx and upgraded some packages (composer) everything stopped working. Laravel prints out the following exception:

ReflectionException in Container.php line 737:
Class cache does not exist
in Container.php line 737
at ReflectionClass->__construct('cache') in Container.php line 737
at Container->build('cache', array()) in Container.php line 627
at Container->make('cache', array()) in Application.php line 674
at Application->make('cache') in Container.php line 1159
at Container->offsetGet('cache') in SessionManager.php line 156
at SessionManager->createCacheHandler('redis') in SessionManager.php line 128
at SessionManager->createRedisDriver() in Manager.php line 87
at Manager->createDriver('redis') in Manager.php line 63
at Manager->driver() in SessionServiceProvider.php line 48
at SessionServiceProvider->Illuminate\Session\{closure}(object(Application), array()) in Container.php line 734
at Container->build(object(Closure), array()) in Container.php line 627
at Container->make('session.store', array()) in Application.php line 674
at Application->make('Illuminate\Session\Store') in LittleGateKeeperServiceProvider.php line 39
at LittleGateKeeperServiceProvider->register() in Application.php line 531
at Application->register(object(LittleGateKeeperServiceProvider)) in ProviderRepository.php line 74
at ProviderRepository->load(array('Illuminate\Encryption\EncryptionServiceProvider', 'Illuminate\Foundation\Providers\ArtisanServiceProvider', 'Illuminate\Auth\AuthServiceProvider', 'Illuminate\Broadcasting\BroadcastServiceProvider', 'Illuminate\Bus\BusServiceProvider', 'Illuminate\Cache\CacheServiceProvider', 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', 'Illuminate\Routing\ControllerServiceProvider', 'Illuminate\Cookie\CookieServiceProvider', 'Illuminate\Database\DatabaseServiceProvider', 'Illuminate\Filesystem\FilesystemServiceProvider', 'Illuminate\Foundation\Providers\FoundationServiceProvider', 'Illuminate\Hashing\HashServiceProvider', 'Illuminate\Mail\MailServiceProvider', 'Illuminate\Pagination\PaginationServiceProvider', 'Illuminate\Pipeline\PipelineServiceProvider', 'Illuminate\Queue\QueueServiceProvider', 'Illuminate\Redis\RedisServiceProvider', 'App\Providers\PasswordResetServiceProvider', 'Illuminate\Session\SessionServiceProvider', 'Illuminate\Translation\TranslationServiceProvider', 'Illuminate\Validation\ValidationServiceProvider', 'Illuminate\View\ViewServiceProvider', 'Lahaxearnaud\LaravelPushbullet\LaravelPushbulletServiceProvider', 'Spatie\Backup\BackupServiceProvider', 'Collective\Remote\RemoteServiceProvider', 'Vinkla\Pusher\PusherServiceProvider', 'Way\Generators\GeneratorsServiceProvider', 'Xethron\MigrationsGenerator\MigrationsGeneratorServiceProvider', 'App\Providers\AppServiceProvider', 'App\Providers\EventServiceProvider', 'App\Providers\RouteServiceProvider', 'Tymon\JWTAuth\Providers\JWTAuthServiceProvider', 'ConnorVG\Transform\TransformServiceProvider', 'Maatwebsite\Excel\ExcelServiceProvider', 'yajra\Datatables\DatatablesServiceProvider', 'Fadion\Bouncy\BouncyServiceProvider', 'Spatie\LittleGateKeeper\LittleGateKeeperServiceProvider')) in Application.php line 507
at Application->registerConfiguredProviders() in RegisterProviders.php line 17
at RegisterProviders->bootstrap(object(Application)) in Application.php line 203
at Application->bootstrapWith(array('Illuminate\Foundation\Bootstrap\DetectEnvironment', 'Illuminate\Foundation\Bootstrap\LoadConfiguration', 'Illuminate\Foundation\Bootstrap\ConfigureLogging', 'Illuminate\Foundation\Bootstrap\HandleExceptions', 'Illuminate\Foundation\Bootstrap\RegisterFacades', 'Illuminate\Foundation\Bootstrap\RegisterProviders', 'Illuminate\Foundation\Bootstrap\BootProviders')) in Kernel.php line 222
at Kernel->bootstrap() in Kernel.php line 117
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
at Kernel->handle(object(Request)) in index.php line 54

Worth mentioning: I installed predis, open resty for nginx. The weird thing is, if I use the file-cache-driver, it runs just fine, without any exceptions. If I ping redis through the cli i get the right 'PONG' response and i'm not sure what to do now.. (other than not using the redis driver that is ;-)).

Maybe worth mentioning is that if i run the artisan command through the cli it gives me different errors:

PHP Catchable fatal error:  Argument 2 passed to         Illuminate\Routing\UrlGenerator::__construct() must be an instance of Illuminate\Http\Request, null given, called in /var/www/html/*laravel-project*/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php on line 62 and defined in /var/www/html/*laravel-project*/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php on line 99

Catchable fatal error: Argument 2 passed to Illuminate\Routing\UrlGenerator::__construct() must be an instance of Illuminate\Http\Request, null given, called in /var/www/html/*laravel-project*/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php on line 62 and defined in /var/www/html/*laravel-project*/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php on line 99

Therefore I've got the idea that there could be something wrong with my nginx vhost config (that was the major change to the server setup). The vhost looks like this:

server {
    listen       80 default_server;
    #listen      [::]:80 default_server ipv6only=on; ## listen for ipv6
    server_name  *MY_SERVER_NAME*;
    root         /sites/*LARAVEL_PROJECT*/public;
    charset utf-8;

    # Elastic search api config
    location /elastic {
        proxy_pass http://localhost:9200;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }


    #auth_basic_user_file /etc/nginx/htpasswd.users;
    # Kibana web access
    location /kibana {
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/htpasswd.users;
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    # entry point to the Laravel project
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    access_log /var/log/nginx/laravel-project-access.log;
    error_log  /var/log/nginx/laravel-project-error.log error;

    sendfile off;
    client_max_body_size 100m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }

    location ~ /\.ht {
        deny all;
    }
}

Any ideas or suggestions?

Thx in advance!

Upvotes: 3

Views: 10682

Answers (4)

Mubashar Abbas
Mubashar Abbas

Reputation: 5663

So I got this error when I was doing composer install in my project to generate the vendor/ directory.

Turns out I had accidentally deleted the bootstrap/cache directory from my project.

I created that directory mkdir bootstrap/cache

and the error went away.

Upvotes: 0

Umair Hamid
Umair Hamid

Reputation: 3557

For me its missing storage folder and its permission issue. So I resolved it after making this folder and then give it apache:apache permission

Upvotes: 0

Rid Islam
Rid Islam

Reputation: 142

May be you used url() helper in your any config file like below code, check it out and remove it..

url('bassets/plugins/highcharts/highcharts.css')

Upvotes: 0

gorodezkiy
gorodezkiy

Reputation: 3419

In my case (laravel 5.2) the issue was in custom service provider, where I declared custom response macroses in register() instead of boot() function.

After moving macroses to the boot() the error disappeared.

Solution was found here: https://laracasts.com/discuss/channels/laravel/class-cache-does-not-exist-error-when-use-redis-session-file-session-is-fine

Upvotes: 4

Related Questions