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 =)
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 :
"driver" => "file"
par exemple"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
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 :
"driver" => "file"
par exemple"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"