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.


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


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

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.


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

```

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 :)


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

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

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.


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


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

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


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.


0

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

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

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.


-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 =)


-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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.