Укажіть дійсний шлях до кешу


152

Я скопіював робочу програму laravel і перейменував її на іншу. Я видалив папку постачальника і знову запускаю такі команди:

composer self-update

composer-update

npm install

bower install

Я налаштував свої маршрути та все правильно, але тепер, коли я намагаюся запустити додаток у своєму браузері, я отримую такі помилки:

InvalidArgumentException у рядку Compiler.php 36: Будь ласка, вкажіть дійсний кеш-шлях.

ErrorException у Filesystem.php рядок 111: file_put_contents (F: \ www \ example \ app \ storage \ Framework / session / edf262ee7a2084a923bb967b938f54cb19f6b37d): не вдалося відкрити потік: Немає такого файлу чи каталогу

У мене ніколи не було цього питання, я не знаю, що його викликає, і я не знаю, як його виправити, я в Інтернеті шукав рішення, але досі не знайшов жодної.


Вам потрібно відновити папки пам’яті, вони знаходяться у вашому файлі .gitignore, тому їх не буде скопійовано, коли ви клонуєте проект (оскільки їх ніколи не натискають на репо)
twigg

Відповіді:


488

Спробуйте наступне:

створити ці папки під зберіганням / фреймворком:

  • sessions
  • views
  • cache

Тепер це має працювати


21
Я поєднав це з кешем php artisan: clear та php artisan config: clear та php view artisan: ясно з відповіді нижче, а потім це спрацювало
cja

Ви можете видалити папку зберігання вручну та запустити команду "php artisan storage: link" через cmd. Потім створіть папки, як було запропоновано вище. Краще ви можете зберегти попередню папку Storage як резервну копію, а пізніше скопіювати - вставте папку Framework у новий шлях зберігання.
Ніладрі Банерджі - Уттарпара

У мене саме ця проблема та виправлення спрацювала, була результатом навмисного виключення всієї папки фреймворку з мого продукту-підриву через його постійний тимчасовий зміна вмісту файлів. Потім налаштування репро в новій системі, природно, призвело до того, що ці папки не існують. Думав, я
поділюсь

3
git не клонує порожні папки! Я створую файл folder.keeper для цих 3 папок.
Тіфан Джу

Так, тому що не потрібно оприлюднювати ці папки
Маурісіо Вандерлі Мартінс

45

Спробуйте це:

  1. php artisan cache:clear
  2. php artisan config:clear
  3. php artisan view:clear

11
Не працювало для мене. Я отримав [InvalidArgumentException] Please provide a valid cache path. знову
MattCochrane

У моєму випадку отримав кошмар, якщо бігти php artisan cache:clear!
Бен

32

Отже, мабуть, те, що сталося, коли я дублював проект, папка Framework всередині моєї папки зберігання не була скопійована в новий каталог, це спричинило мою помилку.


Те саме трапилося і зі мною, коли я виконував рутину composer update. Ще немає рішення.
Пітер

Двічі перевірте всі свої шляхи та переконайтесь, що ніде відсутні папки чи файли.
користувач3718908

4
також перевірте, чи є у папці Framework всі підкаталоги з відповідними дозволами
manix

Здається, що моя проблема стосується "викидання виключення, якщо шлях кешу перегляду порожній". Зміна в Laravel 5.2.40 laraver.xyz/projects/Laravel/versions/v5.2.40 Я не можу відновити зміни - після оновлення всіх композиторів або коментарі ремісників не вдається
Пітер

у моєму випадку у програмі були відсутні папки всередині зберігання
Chaudhry Waqas

21

Ви можете відредагувати ваш readme.md за допомогою інструкцій, щоб встановити додаток laravel в іншому такому середовищі:

## 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

```

ви врятуєте мій день :)
Манкеоморакорт

15

Причину цієї помилки можна простежити з 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;
}

Конструктор викликається BladeCompiler у 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']);
    });
}

Отже, відслідковуючи далі, наступний код:

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

зазвичай знаходиться у /config/view.php, якщо ви використовуєте стандартну структуру 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 (...) повертає помилку, якщо шлях не існує. Таким чином, посилаючись

'Please provide a valid cache path.' error.

Тому, щоб позбутися цієї помилки, ви можете це зробити

storage_path('framework/views')

або

/storage/framework/views

існує :)


10

Вам потрібно створити папки всередині "фреймворку". Будь ласка, виконайте наступні дії:

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

Вам також потрібно встановити дозволи, щоб Laravel міг записувати дані в цей каталог.

chmod -R 775 framework
chown -R www-data:www-data framework

Дозвіл 777 означає, що кожен, хто є користувачем на одному сервері, може читати, записувати та виконувати файл.
Сохайл Ахмед

1
sessionsдовідник у відмінку множини, а неsession
Євгеній Майнагашев,

1
@Evgeniy Maynagashev, Так, ви праві. Це була помилка друку, просто виправлена ​​написання. Спасибі
Sohail Ahmed

7

Перевірте, чи існують такі папки, якщо вони не створюються.

  • зберігання / фреймворк / кеш
  • зберігання / рамки / сеанси
  • зберігання / рамки / тестування
  • зберігання / рамки / перегляди

6

Я вирішив проблему, коли створив папку фреймворку всередині папки зберігання та її підпапок, сесій , представлень та кеша .

Перейдіть до свого cmd або терміналу, а потім введіть кореневий шлях проекту та після цього введіть наступне:

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

Поверніться до кореневого шляху вашого проекту ще раз та запустіть оновлення композитора

Після цього ремісник прекрасно працює.


6

Спробуйте наступне:

створити ці папки під зберіганням / фреймворком:

  • сеанси
  • поглядів
  • кеш / дані

якщо все ж не виходить, то спробуйте

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

якщо отримати помилку не в змозі очистити кеш. Обов’язково створіть дані папки в кеші / даних


5

Будь ласка, запустіть у терміналі,

   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

Тепер вам потрібно змінити дозвіл,

   sudo chmod -R 777 storage

Якщо ви хочете створити динамічно, ви також можете створити як $paths = ["storage","storage/framework", "storage/framework/sessions", "storage/framework/views", "storage/framework/cache", "storage/framework/cache/data", "storage/logs", "storage/fonts"]; `foreach ($ paths як $ path) {` `if (! Файл :: isDirectory ($ path)) {` File::makeDirectory($path, 0777, true, true); } }
Rasheduzzaman

2

/ шлях / до / laravel / зберігання / рамки /

кеш переглядів сеансів

Вище працює робоче рішення


1

Проблема з моєї сторони (під час розгортання в localhost): папка переглядів відсутня .. тому, якщо у вас немає папки Framework, вам потрібно буде додати папки. але якщо вже існує папка Framework, то переконайтесь, що всі вищевказані папки, тобто 1. кеш 2. сеанс 3. перегляди

існує у вашому базовому каталозі.


0

Я вирішив цю проблему, додавши цей рядок у моє index.php:

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

0

Можливо, у вашому каталозі пам’яті відсутній або один із його підкаталогів. У каталозі зберігання повинні бути всі підкаталоги, що постачаються разом із установкою Laravel.


-1

Мої 2 копійки

Видаліть усе з пам’яті, а потім зробіть це:

> 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

Для мене працювали =)


-2

Помилка: "Будь ласка, вкажіть дійсний шлях до кешу." помилка.

Якщо ці помилки приходять, то рішення, наведене нижче: -

будь ласка, створіть папку даних всередині пам’яті / фрейму / кешу


2
Ласкаво просимо до переповнення стека! Будь ласка, надайте відповіді, які містять не просто рішення, а хоча б кілька слів про те, як ви це з’ясували.
zixuan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.