Veuillez fournir un chemin de cache valide

152

J'ai dupliqué une application laravel fonctionnelle et l'ai renommée pour l'utiliser pour une autre application. J'ai supprimé le dossier du fournisseur et réexécuté les commandes suivantes:

composer self-update

composer-update

npm install

bower install

J'ai configuré mes itinéraires et tout correctement, mais maintenant, lorsque j'essaye d'exécuter mon application dans mon navigateur, j'obtiens les erreurs suivantes:

InvalidArgumentException dans la ligne 36 de Compiler.php: veuillez fournir un chemin de cache valide.

ErrorException dans Filesystem.php ligne 111: file_put_contents (F: \ www \ example \ app \ storage \ framework / sessions / edf262ee7a2084a923bb967b938f54cb19f6b37d): impossible d'ouvrir le flux: aucun fichier ou répertoire de ce type

Je n'ai jamais eu ce problème auparavant, je ne sais pas ce qui le cause et je ne sais pas non plus comment le résoudre, j'ai cherché une solution sur Google mais je n'en ai trouvé aucune jusqu'à présent.

user3718908
la source
Vous devez reconstruire les dossiers de stockage, ils sont dans votre fichier .gitignore et ne seront donc pas copiés lorsque vous clonez un projet (car ils ne sont jamais poussés vers le
dépôt

Réponses:

489

Essayez ce qui suit:

créez ces dossiers sous stockage / framework:

  • sessions
  • views
  • cache

Maintenant ça devrait marcher

Mauricio Wanderley Martins
la source
21
J'ai combiné cela avec php artisan cache: clear et php artisan config: clear et php artisan view: clear de la réponse ci-dessous et puis cela a fonctionné
cja
Vous pouvez supprimer le dossier de stockage manuellement et exécuter la commande "php artisan storage: link" via cmd. Créez ensuite des dossiers comme suggéré ci-dessus. Mieux vous pouvez conserver le dossier de stockage précédent comme sauvegarde et copier-coller ultérieurement le dossier de structure dans le nouveau chemin de stockage.
Niladri Banerjee - Uttarpara
J'avais exactement ce problème et le correctif fonctionnait, c'était le résultat de l'exclusion délibérée de tout le dossier du framework de mon produit subversion en raison de son contenu changeant constant de fichier temporaire. Ensuite, la mise en place de la repro sur un nouveau système a naturellement abouti à ce que ces dossiers n'existent pas. Je pensais que je partagerais ...
AdamJones
3
git ne clone pas les dossiers vides! Je vais créer un fichier folder.keeper pour ces 3 dossiers.
Tiefan Ju
Oui, parce que vous n'avez pas besoin de versions de ces dossiers
Mauricio Wanderley Martins
46

Essaye ça:

  1. php artisan cache:clear
  2. php artisan config:clear
  3. php artisan view:clear
ceux qui sont tombés
la source
11
Cela n'a pas fonctionné pour moi. J'ai [InvalidArgumentException] Please provide a valid cache path. à nouveau
MattCochrane
Dans mon cas, j'ai un cauchemar si vous courez php artisan cache:clear!
Ben
32

Donc, apparemment, ce qui s'est passé, c'est lorsque je dupliquais mon projet, le dossier Framework à l'intérieur de mon dossier de stockage n'a pas été copié dans le nouveau répertoire, ce qui a causé mon erreur.

user3718908
la source
La même chose m'est arrivée lorsque je faisais une routine composer update. Pas encore de solution.
Peter
Vérifiez tous vos chemins et assurez-vous qu'il n'y a aucun dossier ou fichier manquant.
user3718908
4
Vérifiez également si le dossier du framework a tous les sous-répertoires avec leurs autorisations respectives
manix
Il semble que mon problème a qqch à voir avec le changement dans Laravel 5.2.40 « exception throw si le chemin du cache de vue est vide. » Laraver.xyz/projects/Laravel/versions/v5.2.40 Je ne peux pas annuler la modification - après la mise à niveau tout compositeur ou les commentaires d'artisan échouent
Peter
dans mon cas, il manquait des dossiers à l'application dans le répertoire de stockage
Chaudhry Waqas
21

Vous pouvez modifier votre readme.md avec des instructions pour installer votre application laravel dans un autre environnement comme celui-ci:

## Create folders

```
#!terminal

cp .env.example .env && mkdir bootstrap/cache storage storage/framework && cd storage/framework && mkdir sessions views cache

```

## Folder permissions

```
#!terminal

sudo chown :www-data app storage bootstrap -R
sudo chmod 775 app storage bootstrap -R

```

## Install dependencies

```
#!terminal

composer install

```
Alex B. Santos
la source
vous sauvez ma journée :)
Mankeomorakort
15

La cause de cette erreur peut être tracée à partir d'Illuminate \ View \ Compilers \ Compiler.php

public function __construct(Filesystem $files, $cachePath)
{
    if (! $cachePath) {
        throw new InvalidArgumentException('Please provide a valid cache path.');
    }

    $this->files = $files;
    $this->cachePath = $cachePath;
}

Le constructeur est appelé par BladeCompiler dans Illuminate \ View \ ViewServiceProvider

/**
 * Register the Blade engine implementation.
 *
 * @param  \Illuminate\View\Engines\EngineResolver  $resolver
 * @return void
 */
public function registerBladeEngine($resolver)
{
    // The Compiler engine requires an instance of the CompilerInterface, which in
    // this case will be the Blade compiler, so we'll first create the compiler
    // instance to pass into the engine so it can compile the views properly.
    $this->app->singleton('blade.compiler', function () {
        return new BladeCompiler(
            $this->app['files'], $this->app['config']['view.compiled']
        );
    });

    $resolver->register('blade', function () {
        return new CompilerEngine($this->app['blade.compiler']);
    });
}

Donc, en remontant plus loin, le code suivant:

$this->app['config']['view.compiled']

se trouve généralement dans votre /config/view.php, si vous utilisez la structure laravel standard.

<?php
return [
    /*
    |--------------------------------------------------------------------------
    | View Storage Paths
    |--------------------------------------------------------------------------
    |
    | Most templating systems load templates from disk. Here you may specify
    | an array of paths that should be checked for your views. Of course
    | the usual Laravel view path has already been registered for you.
    |
    */
    'paths' => [
        resource_path('views'),
    ],
    /*
    |--------------------------------------------------------------------------
    | Compiled View Path
    |--------------------------------------------------------------------------
    |
    | This option determines where all the compiled Blade templates will be
    | stored for your application. Typically, this is within the storage
    | directory. However, as usual, you are free to change this value.
    |
    */
    'compiled' => realpath(storage_path('framework/views')),
];

realpath (...) renvoie false, si le chemin n'existe pas. Ainsi, en invoquant

'Please provide a valid cache path.' error.

Par conséquent, pour vous débarrasser de cette erreur, vous pouvez vous assurer que

storage_path('framework/views')

ou

/storage/framework/views

existe :)

ghabx
la source
11

Vous devez créer des dossiers à l'intérieur du "framework". Veuillez suivre ces étapes:

cd storage/
mkdir -p framework/{sessions,views,cache}

Vous devez également définir des autorisations pour permettre à Laravel d'écrire des données dans ce répertoire.

chmod -R 775 framework
chown -R www-data:www-data framework
Sohail Ahmed
la source
Avec des autorisations de 777, toute personne qui est un utilisateur sur le même serveur peut lire, écrire et exécuter le fichier.
Sohail Ahmed le
1
sessionsrépertoire au pluriel, passession
Evgeniy Maynagashev
1
@Evgeniy Maynagashev, Oui, vous avez raison. C'était une faute de frappe, juste corrigé l'orthographe. Merci
Sohail Ahmed
7

Vérifiez si les dossiers suivants existent, sinon créez ces dossiers.

  • stockage / cadre / cache
  • stockage / framework / sessions
  • stockage / framework / tests
  • stockage / cadre / vues
RAMA KRISHNA
la source
6

J'ai résolu le problème lorsque j'ai créé le dossier de cadre dans le dossier de stockage et ses sessions , vues et cache de sous-dossiers .

Accédez à votre cmd ou terminal, puis tapez le chemin racine de votre projet, puis tapez ce qui suit:

cd storage
mkdir framework
cd framework
mkdir sessions
mkdir views
mkdir cache

Revenez au chemin racine de votre projet et exécutez la mise à jour du compositeur

Après cela, l'artisan fonctionne parfaitement.

Weber
la source
6

Essayez ce qui suit:

créez ces dossiers sous stockage / framework:

  • sessions
  • vues
  • cache / données

si cela ne fonctionne toujours pas, essayez

php artisan cache:clear
php artisan config:clear
php artisan view:clear

si obtenir une erreur de ne pas pouvoir vider le cache. Assurez-vous de créer un dossier data dans le cache / data

Mohsin Younas
la source
5

Veuillez exécuter dans le terminal,

   sudo mkdir storage/framework
   sudo mkdir storage/framework/sessions
   sudo mkdir storage/framework/views
   sudo mkdir storage/framework/cache
   sudo mkdir storage/framework/cache/data

Vous devez maintenant modifier l'autorisation,

   sudo chmod -R 777 storage
Rasheduzzaman
la source
Si vous voulez créer dynamiquement, vous pouvez également créer comme: $paths = ["storage","storage/framework", "storage/framework/sessions", "storage/framework/views", "storage/framework/cache", "storage/framework/cache/data", "storage/logs", "storage/fonts"]; `foreach ($ chemins comme $ chemin) {` `if (! File :: isDirectory ($ chemin)) {` File::makeDirectory($path, 0777, true, true); } }
Rasheduzzaman
2

/ chemin / vers / laravel / stockage / framework /

sessions vues cache

Ci-dessus est la solution de travail

Vibhuti narayan singh
la source
1

Problème de mon côté (lors du déploiement sur localhost): il y avait un dossier de vues manquant .. donc si vous n'avez pas le dossier de framework, vous devrez ajouter des dossiers. mais si déjà un dossier Framework existe, assurez-vous que tous les dossiers ci-dessus, c'est-à-dire 1. cache 2. session 3. vues

existe dans votre répertoire de framework.

Farid Abbas
la source
0

J'ai résolu ce problème en ajoutant cette ligne dans mon index.php:

$app['config']['view.compiled'] = "storage/framework/cache";
crius
la source
0

Votre répertoire de stockage est peut-être manquant, ou l'un de ses sous-répertoires. Le répertoire de stockage doit contenir tous les sous-répertoires fournis avec l'installation de Laravel.

Naveed Ali
la source
-1

Mes 2 cents

Retirez tout ce qui se trouve à l'intérieur du stockage, puis procédez comme suit:

> cd storage/
> mkdir -p framework/{sessions,views,cache}
> chmod -R 777 framework

// This last line depends on your user group settings so 
// it may not be applicable to you.
> chown -R www-data:www-data framework

A travaillé pour moi =)

lapin blanc
la source
-2

Erreur: "Veuillez fournir un chemin de cache valide." Erreur.

Si ces erreurs de type surviennent, la solution donnée ci-dessous: -

veuillez créer un dossier de données à l'intérieur de stockage / framework / cache

user13483704
la source
2
Bienvenue dans Stack Overflow! Veuillez fournir des réponses qui incluent non seulement la solution, mais au moins quelques mots sur la façon dont vous l'avez découvert.
zixuan