Forneça um caminho de cache válido

152

Dupliquei um aplicativo laravel funcional e o renomeei para usar em outro aplicativo. Excluí a pasta do fornecedor e execute os seguintes comandos novamente:

composer self-update

composer-update

npm install

bower install

Eu configurei minhas rotas e tudo corretamente, no entanto, agora, quando tento executar meu aplicativo no navegador, recebo os seguintes erros:

InvalidArgumentException na linha 36 do Compiler.php: forneça um caminho de cache válido.

ErrorException no sistema de arquivos.php linha 111: file_put_contents (F: \ www \ example \ app \ storage \ framework / sessions / edf262ee7a2084a923bb967b938f54cb19f6b37d): falha ao abrir o fluxo: nenhum arquivo ou diretório

Eu nunca tive esse problema antes, não sei o que está causando isso, nem sei como corrigi-lo, pesquisei on-line por uma solução, mas não encontrei nenhuma até agora.

user3718908
fonte
Você precisa reconstruir as pastas de armazenamento, eles estão em seu arquivo .gitignore tão rotina ser copiado quando você clonar um projeto (como eles nunca são empurrados para o repo)
twigg

Respostas:

488

Tente o seguinte:

crie estas pastas em storage / framework:

  • sessions
  • views
  • cache

Agora deve funcionar

Mauricio Wanderley Martins
fonte
21
Eu combinei isso com cache de php artesão: clara e artesão php config: visão clara e php artesão: resulta da resposta abaixo e, em seguida, ele trabalhou
CJA
Você pode excluir a pasta de armazenamento manualmente e executar o comando "php artisan storage: link" via cmd. Em seguida, crie pastas como sugerido acima. É melhor manter a pasta de armazenamento anterior como backup e copiar posteriormente - cole a pasta da estrutura no novo caminho de armazenamento.
Niladri Banerjee - Uttarpara
Eu tinha exatamente esse problema e a correção funcionou, foi o resultado da exclusão deliberada de toda a pasta da estrutura do meu produto subversion devido à constante alteração temporária do conteúdo do arquivo. A configuração da reprodução em um novo sistema naturalmente resultou na inexistência dessas pastas. Pensei que iria partilhar ...
AdamJones
3
O git não clona pastas vazias! Vou criar um arquivo folder.keeper para essas 3 pastas.
Tiefan Ju
Sim, porque não é necessário versionar essas pastas #
Mauricio Wanderley Martins
45

Tente o seguinte:

  1. php artisan cache:clear
  2. php artisan config:clear
  3. php artisan view:clear
caído
fonte
11
Não funcionou para mim. Eu tenho [InvalidArgumentException] Please provide a valid cache path. novamente
MattCochrane
No meu caso, tenho um pesadelo se correr php artisan cache:clear!
Ben
32

Então, aparentemente, o que aconteceu foi quando eu estava duplicando meu projeto, a pasta da estrutura dentro da minha pasta de armazenamento não foi copiada para o novo diretório, isso causou o meu erro.

user3718908
fonte
O mesmo aconteceu comigo quando eu estava fazendo uma rotina composer update. Ainda não há solução.
Peter
Verifique todos os seus caminhos e verifique se não há pastas ou arquivos ausentes.
user3718908
4
Também verifique se a pasta framework tem todos os subdiretórios com suas respectivas permissões
manix
Parece que meu problema tem sth a ver com a mudança na Laravel 5.2.40 "exceção Lance se o caminho de cache vista é vazio." Laraver.xyz/projects/Laravel/versions/v5.2.40 eu não posso reverter a alteração - após atualizar todos compositor ou comentários artesanais falhar
Peter
no meu aplicativo caso estava faltando pastas dentro dir armazenamento
Chaudhry Waqas
21

Você pode editar seu readme.md com instruções para instalar seu aplicativo laravel em outro ambiente como este:

## 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
fonte
você salvar meu dia :)
Mankeomorakort
15

A causa desse erro pode ser rastreada em 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;
}

O construtor é chamado pelo BladeCompiler em 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']);
    });
}

Então, rastreando ainda mais, o seguinte código:

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

geralmente está localizado no seu /config/view.php, se você usar a estrutura padrão do laravel.

<?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')),
];

caminho real (...) retorna falso, se o caminho não existir. Assim, invocando

'Please provide a valid cache path.' error.

Portanto, para se livrar desse erro, o que você pode fazer é garantir que

storage_path('framework/views')

ou

/storage/framework/views

existe :)

ghabx
fonte
9

Você precisa criar pastas dentro do "framework". Por favor, siga estes passos:

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

Você também precisa definir permissões para permitir que o Laravel escreva dados nesse diretório.

chmod -R 775 framework
chown -R www-data:www-data framework
Sohail Ahmed
fonte
Com permissões 777 significa que qualquer pessoa que seja um usuário no mesmo servidor pode ler, gravar e executar o arquivo.
Sohail Ahmed
1
sessionsdiretório no caso plural, nãosession
Evgeniy Maynagashev
1
@Evgeniy Maynagashev, Sim, você está certo. Foi erro de digitação, apenas corrigiu a ortografia. Obrigado
Sohail Ahmed
7

Verifique se as seguintes pastas existem, se não criar essas pastas.

  • armazenamento / estrutura / cache
  • armazenamento / estrutura / sessões
  • armazenamento / estrutura / teste
  • armazenamento / estrutura / visualizações
RAMA KRISHNA
fonte
6

Resolvi o problema quando criei a pasta de estrutura dentro da pasta de armazenamento e suas subpastas , sessões , visualizações e cache .

Vá para o cmd ou terminal e digite o caminho raiz do projeto e depois digite o seguinte:

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

Volte ao caminho raiz do projeto novamente e execute a atualização do compositor

Depois que o artesão funciona perfeitamente.

Weber
fonte
6

Tente o seguinte:

crie estas pastas em storage / framework:

  • sessões
  • Visualizações
  • cache / dados

se ainda assim não funcionar, tente

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

se receber um erro de não conseguir limpar o cache. Certifique-se de criar os dados de uma pasta no cache / data

Mohsin Younas
fonte
5

Por favor, corra no 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

Agora você precisa alterar a permissão,

   sudo chmod -R 777 storage
Rasheduzzaman
fonte
Se você deseja criar dinamicamente, também pode criar como, $paths = ["storage","storage/framework", "storage/framework/sessions", "storage/framework/views", "storage/framework/cache", "storage/framework/cache/data", "storage/logs", "storage/fonts"]; `foreach ($ caminhos como $ caminho) {` `if (! File :: isDirectory ($ path)) {` File::makeDirectory($path, 0777, true, true); } }
Rasheduzzaman
2

/ caminho / para / laravel / storage / framework /

cache de visualizações de sessões

Acima é a solução de trabalho

Vibhuti narayan singh
fonte
1

Problema do meu lado (durante a implantação no host local): faltava a pasta de visualizações. Portanto, se você não tiver a pasta de estrutura, precisará adicionar pastas. mas se já existir uma pasta de estrutura, verifique se todas as pastas acima, isto é, 1. cache 2. sessão 3. visualizações

existe no seu diretório de estrutura.

Farid Abbas
fonte
0

Resolvi esse problema adicionando esta linha no meu index.php:

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

Seu diretório de armazenamento pode estar ausente ou um de seus subdiretórios. O diretório de armazenamento deve ter todos os subdiretórios fornecidos com a instalação do Laravel.

Ali Naveed
fonte
-1

Meus 2 centavos

Remova tudo o que estiver dentro do armazenamento e faça o seguinte:

> 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

Trabalhou para mim =)

Coelho branco
fonte
-2

Erro: 'Forneça um caminho de cache válido.' erro.

Se esse tipo de erro ocorrer, a solução fornecida abaixo: -

crie uma pasta de dados dentro de storage / framework / cache

user13483704
fonte
2
Bem-vindo ao Stack Overflow! Forneça respostas que incluam não apenas a solução, mas pelo menos algumas palavras sobre como você descobriu isso.
zixuan