Пожалуйста, укажите правильный путь к кешу


152

Я продублировал работающее приложение laravel и переименовал его для использования в другом приложении. Я удалил папку vendor и снова выполнил следующие команды:

composer self-update

composer-update

npm install

bower install

Я настроил свои маршруты и все правильно, однако теперь, когда я пытаюсь запустить свое приложение в своем браузере, я получаю следующие ошибки:

InvalidArgumentException в строке 36 Compiler.php: укажите правильный путь к кешу.

ErrorException в строке Filesystem.php 111: file_put_contents (F: \ www \ example \ app \ storage \ framework / session / edf262ee7a2084a923bb967b938f54cb19f6b37d): не удалось открыть поток: нет такого файла или каталога

У меня никогда раньше не было этой проблемы, я не знаю, что ее вызывает, и я не знаю, как ее исправить, я нашел решение в интернете, но пока не нашел.


Вам необходимо восстановить папки хранения, они находятся в вашем файле .gitignore, поэтому не будут копироваться при клонировании проекта (так как они никогда не
twigg

Ответы:


489

Попробуйте следующее:

создайте эти папки в хранилище / фреймворке:

  • sessions
  • views
  • cache

Теперь должно работать


21
Я объединил это с php artisan cache: clear и php artisan config: clear и php artisan view: очистить от ответа ниже, и тогда это сработало
cja

Вы можете удалить папку хранилища вручную и запустить команду «php artisan storage: link» через cmd. Затем создайте папки, как предложено выше. Лучше сохранить прежнюю папку хранилища в качестве резервной копии, а затем скопировать - вставьте папку фреймворка в новый путь хранения.
Ниладри Банерджи - Уттарпара

У меня была именно эта проблема, и исправление работало, было результатом преднамеренного исключения всей папки фреймворка из моего продукта subversion из-за постоянного изменения содержимого временного файла. Тогда настройка воспроизведения в новой системе естественным образом привела к тому, что эти папки не существовали. Думал, что поделюсь ...
AdamJones

3
Git не клонирует пустые папки! Я создам файл folder.keeper для этих 3 папок.
Тифан Джу

Да, потому что не нужно версировать эти папки
Маурисио Уандерли Мартинс

46

Попробуй это:

  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

Очевидно, что произошло, когда я дублировал свой проект, папка фреймворка внутри моей папки хранения не была скопирована в новый каталог, это вызвало мою ошибку.


То же самое случилось со мной, когда я занимался рутиной composer update. Пока нет решения.
Питер

Дважды проверьте все ваши пути и убедитесь, что нигде нет пропущенных папок или файлов.
user3718908

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 (...) возвращает false, если путь не существует. Таким образом, ссылаясь

'Please provide a valid cache path.' error.

Поэтому, чтобы избавиться от этой ошибки, вы можете убедиться, что

storage_path('framework/views')

или

/storage/framework/views

существуют :)


11

Вам необходимо создать папки внутри «рамки». Пожалуйста, выполните следующие действия:

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
@ Евгений Майнагашев, да, вы правы. Это была опечатка, просто исправили орфографию. Спасибо
Сохаил Ахмед

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

если получаю ошибку не могу очистить кеш. Обязательно создайте папку data в кеш / data


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 (! File :: isDirectory ($ path)) {` File::makeDirectory($path, 0777, true, true); } }
Rasheduzzaman


1

Проблема на моей стороне (при развертывании на локальном хосте): отсутствовала папка представлений .. поэтому, если у вас нет папки фреймворка, вам нужно будет добавить папки. но если папка фреймворка уже существует, убедитесь, что все вышеперечисленные папки, например: 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

Ошибка: «Пожалуйста, укажите правильный путь к кешу». ошибка.

Если возникает ошибка типа, то решение приведено ниже:

пожалуйста, создайте папку данных в хранилище / framework / cache


2
Добро пожаловать в стек переполнения! Пожалуйста, предоставьте ответы, которые включают не только решение, но и хотя бы несколько слов о том, как вы узнали это.
Zixuan
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.