Podaj prawidłową ścieżkę do pamięci podręcznej

152

Skopiowałem działającą aplikację laravel i zmieniłem jej nazwę na inną aplikację. Usunąłem folder dostawcy i ponownie uruchomiłem następujące polecenia:

composer self-update

composer-update

npm install

bower install

Skonfigurowałem swoje trasy i wszystko poprawnie, ale teraz, gdy próbuję uruchomić aplikację w przeglądarce, pojawiają się następujące błędy:

InvalidArgumentException w linii Compiler.php 36: Podaj prawidłową ścieżkę do pamięci podręcznej.

ErrorException w linii Filesystem.php 111: file_put_contents (F: \ www \ example \ app \ storage \ framework / session / edf262ee7a2084a923bb967b938f54cb19f6b37d): nie udało się otworzyć strumienia: Brak takiego pliku lub katalogu

Nigdy wcześniej nie miałem tego problemu, nie wiem, co go powoduje, ani nie wiem, jak go naprawić, szukałem rozwiązania w Internecie, ale jak dotąd go nie znalazłem.

user3718908
źródło
Musisz odbudować foldery przechowywania, są one w pliku .gitignore, więc nie zostaną skopiowane podczas klonowania projektu (ponieważ nigdy nie są
przenoszone

Odpowiedzi:

488

Spróbuj wykonać następujące czynności:

utwórz te foldery w pamięci / strukturze:

  • sessions
  • views
  • cache

Teraz powinno działać

Mauricio Wanderley Martins
źródło
21
Połączyłem to z pamięcią podręczną php artisan: clear i php artisan config: clear i php artisan view: wyczyść z odpowiedzi poniżej, a potem zadziałało
cja
Możesz ręcznie usunąć folder przechowywania i uruchomić polecenie „php artisan storage: link” przez cmd. Następnie utwórz foldery zgodnie z powyższą sugestią. Lepiej jest zachować poprzedni folder magazynu jako kopię zapasową, a później skopiować - wklej folder struktury w nowej ścieżce magazynu.
Niladri Banerjee - Uttarpara
Miałem dokładnie ten problem i poprawka zadziałała, była wynikiem celowego wykluczenia całego folderu frameworka z mojego produktu Subversion z powodu ciągłej zmiany zawartości pliku tymczasowego. Skonfigurowanie reprodukcji w nowym systemie oczywiście spowodowało, że te foldery nie istniały. Pomyślałem, że podzielę się ...
AdamJones
3
git nie klonuje pustych folderów! Utworzę plik folder.keeper dla tych 3 folderów.
Tiefan Ju
Tak, ponieważ nie trzeba wersjonować tych folderów
Mauricio Wanderley Martins
45

Spróbuj tego:

  1. php artisan cache:clear
  2. php artisan config:clear
  3. php artisan view:clear
upadły
źródło
11
Nie działa dla mnie. Mam [InvalidArgumentException] Please provide a valid cache path. ponownie
MattCochrane
W moim przypadku mam koszmar, jeśli uciekniesz php artisan cache:clear!
Ben
32

Najwyraźniej to, co się stało, było, gdy duplikowałem mój projekt, folder framework w moim folderze przechowywania nie został skopiowany do nowego katalogu, co spowodowało mój błąd.

user3718908
źródło
To samo przytrafiło mi się, kiedy wykonywałem rutynę composer update. Na razie brak rozwiązania.
Peter
Dokładnie sprawdź wszystkie ścieżki i upewnij się, że nigdzie nie ma brakujących folderów ani plików.
user3718908
4
sprawdź także, czy folder framework ma wszystkie podkatalogi z odpowiednimi uprawnieniami
manix
Wygląda na to, że mój problem ma coś wspólnego z "Wyrzuć wyjątek, jeśli ścieżka pamięci podręcznej widoku jest pusta". Zmiana w Laravel 5.2.40 laraver.xyz/projects/Laravel/versions/v5.2.40 Nie mogę cofnąć zmiany - po aktualizacji wszystkie Composer lub komentarze rzemieślników zawodzą
Peter
w moim przypadku w aplikacji brakowało folderów w pamięci reż.
Chaudhry Waqas
21

Możesz edytować plik readme.md, korzystając z instrukcji instalacji aplikacji laravel w innym środowisku, takim jak to:

## 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
źródło
ratujesz
15

Przyczynę tego błędu można znaleźć w 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;
}

Konstruktor jest wywoływany przez BladeCompiler w 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']);
    });
}

Więc śledząc dalej, następujący kod:

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

znajduje się zazwyczaj w twoim /config/view.php, jeśli używasz standardowej struktury 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')),
];

realpath (...) zwraca wartość false, jeśli ścieżka nie istnieje. Tak więc wzywając

'Please provide a valid cache path.' error.

Dlatego, aby pozbyć się tego błędu, możesz to zrobić

storage_path('framework/views')

lub

/storage/framework/views

istnieje :)

ghabx
źródło
10

Musisz utworzyć foldery wewnątrz „frameworka”. Wykonaj następujące kroki:

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

Musisz także ustawić uprawnienia, aby umożliwić Laravel zapisywanie danych w tym katalogu.

chmod -R 775 framework
chown -R www-data:www-data framework
Sohail Ahmed
źródło
Z uprawnieniami 777 oznacza, że ​​każdy, kto jest użytkownikiem tego samego serwera, może czytać, zapisywać i wykonywać plik.
Sohail Ahmed
1
sessionskatalog w liczbie mnogiej, niesession
Evgeniy Maynagashev
1
@Evgeniy Maynagashev, Tak, masz rację. To był błąd literowy, po prostu poprawiłem pisownię. Dzięki
Sohail Ahmed
7

Sprawdź, czy istnieją następujące foldery, jeśli nie, utwórz te foldery.

  • przechowywanie / framework / cache
  • przechowywanie / framework / sesje
  • przechowywanie / framework / testowanie
  • przechowywanie / ramy / widoki
RAMA KRISHNA
źródło
6

Rozwiązałem problem, kiedy utworzyłem folder framework w folderze magazynu i jego podfolderach sesjach , widokach i pamięci podręcznej .

Przejdź do swojego cmd lub terminala, a następnie wpisz ścieżkę do katalogu głównego projektu, a następnie wpisz:

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

Wróć do ścieżki głównej projektu i uruchom aktualizację kompozytora

Po tym rzemieślnik działa doskonale.

Weber
źródło
6

Spróbuj wykonać następujące czynności:

utwórz te foldery w pamięci / strukturze:

  • sesje
  • wyświetlenia
  • pamięć podręczna / dane

jeśli nadal nie działa, spróbuj

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

jeśli pojawi się błąd, że nie można wyczyścić pamięci podręcznej. Upewnij się, że utworzyłeś dane folderu w pamięci podręcznej / danych

Mohsin Younas
źródło
5

Uruchom w terminalu,

   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

Teraz musisz zmienić uprawnienia,

   sudo chmod -R 777 storage
Rasheduzzaman
źródło
Jeśli chcesz tworzyć dynamicznie, możesz również utworzyć jako, $paths = ["storage","storage/framework", "storage/framework/sessions", "storage/framework/views", "storage/framework/cache", "storage/framework/cache/data", "storage/logs", "storage/fonts"]; `foreach ($ path as $ path) {` `if (! File :: isDirectory ($ path)) {` File::makeDirectory($path, 0777, true, true); } }
Rasheduzzaman
2

/ ścieżka / do / laravel / storage / framework /

pamięć podręczna widoków sesji

Powyżej znajduje się działające rozwiązanie

Vibhuti Narayan Singh
źródło
1

Problem po mojej stronie (podczas wdrażania na hoście lokalnym): brakowało folderu views ... więc jeśli nie masz folderu framework, będziesz musiał dodać foldery. ale jeśli już istnieje folder framework, upewnij się, że wszystkie powyższe foldery tj. 1. pamięć podręczna 2. sesja 3. widoki

istnieje w twoim katalogu frameworka.

Farid Abbas
źródło
0

Rozwiązałem ten problem, dodając tę ​​linię w moim index.php:

$app['config']['view.compiled'] = "storage/framework/cache";
crius
źródło
0

Być może brakuje Twojego katalogu przechowywania lub jednego z jego podkatalogów. Katalog przechowywania musi zawierać wszystkie podkatalogi dostarczone z instalacją Laravel.

Naveed Ali
źródło
-1

Moje 2 centy

Usuń wszystko z pamięci, a następnie zrób to:

> 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

Pracował dla mnie =)

biały Królik
źródło
-2

Błąd: „Podaj prawidłową ścieżkę pamięci podręcznej”. błąd.

Jeśli wystąpi błąd tego typu, rozwiązanie podane poniżej: -

proszę utworzyć folder danych w pamięci / strukturze / pamięci podręcznej

user13483704
źródło
2
Witamy w Stack Overflow! Podaj odpowiedzi, które zawierają nie tylko rozwiązanie, ale przynajmniej kilka słów o tym, jak się tego dowiedziałeś.
zixuan