Framework: [5.0][5.1] Problème de cache après la mise à niveau de 4.2

Créé le 5 janv. 2016  ·  3Commentaires  ·  Source: laravel/framework

Salut !
J'ai un projet sous laravel 4.2 depuis plus d'un an.
Cette semaine j'ai commencé le processus de mise à jour pour utiliser le 5.0 puis le 5.1 et finalement je vise le 5.2.

La mise à niveau 5.0 s'est bien déroulée, tout a parfaitement fonctionné sauf ce problème de mise en cache.
J'ai d'abord pensé "Passons à la version 5.1 et voyons si cela fonctionne", mais ce n'est pas le cas.

J'utilise une commande artisanale qui génère du cache et j'obtiens cette exception :

Refreshing the message cache...

  [InvalidArgumentException]
  Cache store [] is not defined.

J'ai d'abord pensé à un problème d'installation. J'ai tout réinstallé à partir de zéro en suivant le guide doc officiel de laravel. j'ai vérifié chaque configuration etc... Mais j'ai toujours ce problème.

Il y a des informations qui peuvent aider à reproduire / m'aider :

contenu composer.json :

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "laravel/framework": "5.1.*",
        "illuminate/html": "5.*",
        "andywer/js-localization": "dev-laravel-5",
        "laracasts/flash" : "~1.0"
    },
    "require-dev": {
        "phpunit/phpunit": "~4.0",
        "phpspec/phpspec": "~2.1"
    },
    "autoload": {
        "classmap": [
            "database",
            "app/Models",
            "app/Http/Controllers"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "classmap": [
            "tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-create-project-cmd": [
            "php -r \"copy('.env.example', '.env');\"",
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "stable"
}

Fichier de configuration _cache.php_ :

<?php

return array(

    /*
    |--------------------------------------------------------------------------
    | Default Cache Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default cache "driver" that will be used when
    | using the Caching library. Of course, you may use other drivers any
    | time you wish. This is the default when another is not specified.
    |
    | Supported: "file", "database", "apc", "memcached", "redis", "array"
    |
    */

    'driver' => 'file',

    /*
    |--------------------------------------------------------------------------
    | Cache Stores
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the cache "stores" for your application as
    | well as their drivers. You may even define multiple stores for the
    | same cache driver to group types of items stored in your caches.
    |
    */
    'stores' => [
        'apc' => [
            'driver' => 'apc',
        ],
        'array' => [
            'driver' => 'array',
        ],
        'database' => [
            'driver' => 'database',
            'table'  => 'cache',
            'connection' => 'mysql',
        ],
        'file' => [
            'driver' => 'file',
            'path'   => storage_path('framework/cache'),
        ],
        'memcached' => [
            'driver'  => 'memcached',
            'servers' => [
                [
                    'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100,
                ],
            ],
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],
    ],
    /*
    |--------------------------------------------------------------------------
    | Cache Key Prefix
    |--------------------------------------------------------------------------
    |
    | When utilizing a RAM based store such as APC or Memcached, there might
    | be other applications utilizing the same cache. So, we'll specify a
    | value to get prefixed to all our keys so we can avoid collisions.
    |
    */
    'prefix' => 'laravel',

);

Pour illustrer le problème, j'ai essayé un cas d'utilisation simple du cache dans ma page d'accueil :

        public function index()
    {
        Cache::put('toto', 'titi', 1);
        $value = Cache::get('toto');
        return View::make('pages.accueil');
    }

Et voici la pile d'appels que je reçois dans le navigateur (coupez là où elle passe dans mon fichier):

Whoops, looks like something went wrong.

1/1
InvalidArgumentException in CacheManager.php line 93:
Cache store [] is not defined.
in CacheManager.php line 93
at CacheManager->resolve(null) in CacheManager.php line 77
at CacheManager->get(null) in CacheManager.php line 55
at CacheManager->store() in CacheManager.php line 318
at CacheManager->__call('put', array('toto', 'titi', '1')) in Facade.php line 222
at CacheManager->put('toto', 'titi', '1') in Facade.php line 222
at Facade::__callStatic('put', array('toto', 'titi', '1')) in AccueilController.php line 13
at Cache::put('toto', 'titi', '1') in AccueilController.php line 13
at AccueilController->index()

Est-ce que quelqu'un a déjà rencontré ce genre de bug ou a une idée de ce qu'il faut essayer ?
Je peux donner des détails plus précis si vous avez besoin, demandez simplement =)

Commentaire le plus utile

D'accord, je suis assez stupide je suppose. Je poste juste la solution si jamais quelqu'un tombe dans ce "piège" comme moi :

  • Dans Laravel 4.2 , la clé de configuration du pilote de cache par défaut est "driver" => "file" par exemple
  • Dans Laravel 5.x , cette clé est nommée "default" => "file"

Lors de la migration, j'ai effacé le contenu de la configuration, clé par clé pour vérifier la nouvelle clé/configuration, mais j'ai raté ce détail. donc j'avais "driver" => "file" dans mon 5.1 au lieu de "default" => "file"

Tous les 3 commentaires

Merci de demander sur les forums.

D'accord, je suis assez stupide je suppose. Je poste juste la solution si jamais quelqu'un tombe dans ce "piège" comme moi :

  • Dans Laravel 4.2 , la clé de configuration du pilote de cache par défaut est "driver" => "file" par exemple
  • Dans Laravel 5.x , cette clé est nommée "default" => "file"

Lors de la migration, j'ai effacé le contenu de la configuration, clé par clé pour vérifier la nouvelle clé/configuration, mais j'ai raté ce détail. donc j'avais "driver" => "file" dans mon 5.1 au lieu de "default" => "file"

Même après 3 ans, vérifiez le fichier .env pour vous assurer que les arguments corrects ont été fournis

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

felixsanz picture felixsanz  ·  3Commentaires

gabriellimo picture gabriellimo  ·  3Commentaires

RomainSauvaire picture RomainSauvaire  ·  3Commentaires

klimentLambevski picture klimentLambevski  ·  3Commentaires

shopblocks picture shopblocks  ·  3Commentaires