โปรดระบุเส้นทางแคชที่ถูกต้อง


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 / edf262ee7a2084a923bb967b938b5438f54cb19f6b37d): ไม่สามารถเปิดสตรีม: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ฉันไม่เคยมีปัญหานี้มาก่อนฉันไม่ทราบว่าอะไรเป็นสาเหตุของปัญหาและไม่ทราบวิธีการแก้ไขฉันได้ใช้ Google แบบออนไลน์เพื่อหาวิธีแก้ปัญหา แต่ไม่พบเลย


คุณต้องสร้างโฟลเดอร์หน่วยเก็บข้อมูลขึ้นใหม่พวกเขาอยู่ในไฟล์. gitignore ของคุณดังนั้นจะไม่ถูกคัดลอกเมื่อคุณโคลนโปรเจ็กต์ (เนื่องจากไม่ถูกส่งไปยัง repo)
twigg

คำตอบ:


488

ลองทำสิ่งต่อไปนี้:

สร้างโฟลเดอร์เหล่านี้ภายใต้การจัดเก็บ / กรอบ:

  • sessions
  • views
  • cache

ตอนนี้มันควรจะทำงาน


21
ฉันรวมสิ่งนี้กับแคชของช่าง PHP: ล้างและกำหนดค่าช่าง PHP: มุมมองที่ชัดเจนและ php ช่างฝีมือ: ชัดเจนจากคำตอบด้านล่างแล้วมันทำงาน
cja

คุณสามารถลบโฟลเดอร์หน่วยเก็บข้อมูลด้วยตนเองและเรียกใช้คำสั่ง "php artisan storage: link" ผ่านทาง cmd จากนั้นสร้างโฟลเดอร์ตามที่แนะนำข้างต้น ดีกว่าคุณสามารถเก็บโฟลเดอร์ Storage ก่อนหน้าเป็นการสำรองและคัดลอกภายหลัง - วางโฟลเดอร์ Framework ในพา ธ Storage ใหม่
Niladri Banerjee - Uttarpara

ฉันมีปัญหานี้อย่างแน่นอนและการแก้ไขทำงานเป็นผลมาจากการจงใจยกเว้นโฟลเดอร์เฟรมเวิร์กทั้งหมดจากผลิตภัณฑ์การโค่นล้มของฉันเนื่องจากมีการเปลี่ยนแปลงเนื้อหาไฟล์ชั่วคราวคงที่ จากนั้นตั้งค่าการทำสำเนาบนระบบใหม่ตามปกติส่งผลให้โฟลเดอร์เหล่านี้ไม่มีอยู่จริง คิดว่าฉันจะแบ่งปัน ...
AdamJones

3
git ไม่ได้ทำการโคลนโฟลเดอร์เปล่า! ฉันจะสร้างไฟล์ folder.keeper สำหรับ 3 โฟลเดอร์เหล่านั้น
Tiefan Ju

ใช่เพราะไม่ต้องการโฟลเดอร์เวอร์ชันนี้
Mauricio Wanderley Martins

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!
Ben

32

เห็นได้ชัดว่าสิ่งที่เกิดขึ้นคือเมื่อฉันทำซ้ำโครงการกรอบโฟลเดอร์ภายในโฟลเดอร์จัดเก็บข้อมูลของฉันไม่ได้คัดลอกไปยังไดเรกทอรีใหม่นี้ทำให้เกิดข้อผิดพลาดของฉัน


composer updateสิ่งเดียวกันที่เกิดขึ้นกับผมเมื่อผมทำประจำ ยังไม่มีวิธีแก้ปัญหา
ปีเตอร์

ตรวจสอบเส้นทางทั้งหมดของคุณอีกครั้งและตรวจสอบให้แน่ใจว่าไม่มีโฟลเดอร์หรือไฟล์หายไปทุกที่
3718908

4
ตรวจสอบว่าโฟลเดอร์เฟรมเวิร์กมีไดเรกทอรีย่อยทั้งหมดที่มีการอนุญาตตามลำดับหรือไม่
manix

ดูเหมือนว่าปัญหาของฉันเกี่ยวกับ "โยนข้อยกเว้นหากเส้นทางแคชดูว่างเปล่า" เปลี่ยนใน Laravel 5.2.40 laraver.xyz/projects/Laravel/versions/v5.2.40ฉันไม่สามารถเปลี่ยนการเปลี่ยนแปลงได้ - หลังจากอัพเกรดผู้แต่งทั้งหมด หรือความคิดเห็นของช่างฝีมือล้มเหลว
Peter

ในแอปพลิเคชันของฉันกรณีไม่มีโฟลเดอร์ในที่เก็บข้อมูล
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

```

คุณช่วยวันของฉัน :)
Mankeomorakort

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

คุณต้องสร้างโฟลเดอร์ภายใน "framework" กรุณาทำตามขั้นตอนเหล่านี้:

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

คุณต้องตั้งค่าการอนุญาตเพื่ออนุญาตให้ Laravel เขียนข้อมูลในไดเรกทอรีนี้

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

ด้วยสิทธิ์ 777 หมายความว่าทุกคนที่เป็นผู้ใช้บนเซิร์ฟเวอร์เดียวกันสามารถอ่านเขียนและเรียกใช้ไฟล์
Sohail Ahmed

1
sessionsไดเรกทอรีในกรณีพหูพจน์ไม่ใช่session
Evgeniy Maynagashev

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


1

ปัญหาในด้านของฉัน (ในขณะที่ปรับใช้บน localhost): มีโฟลเดอร์มุมมองหายไป .. ดังนั้นหากคุณไม่มีโฟลเดอร์เฟรมเวิร์กคุณจะต้องเพิ่มโฟลเดอร์ แต่ถ้ามีโฟลเดอร์เฟรมเวิร์กอยู่แล้วให้แน่ใจว่าโฟลเดอร์ด้านบนทั้งหมดคือ 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
ยินดีต้อนรับสู่ Stack Overflow! โปรดระบุคำตอบที่ไม่เพียง แต่แก้ปัญหา แต่อย่างน้อยก็มีคำไม่กี่คำเกี่ยวกับวิธีที่คุณค้นพบสิ่งนี้
zixuan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.