Lütfen geçerli bir önbellek yolu sağlayın


171

Çalışan bir laravel uygulamasını kopyaladım ve başka bir uygulama için kullanmak üzere yeniden adlandırdım. Satıcı klasörünü sildim ve aşağıdaki komutları tekrar çalıştırdım:

composer self-update

composer-update

npm install

bower install

Rotalarımı ve her şeyi doğru şekilde yapılandırdım ancak şimdi uygulamamı tarayıcımda çalıştırmayı denediğimde aşağıdaki hataları alıyorum:

Compiler.php satır 36'da InvalidArgumentException: Lütfen geçerli bir önbellek yolu sağlayın.

Filesystem.php satır 111'deki ErrorException: file_put_contents (F: \ www \ example \ app \ storage \ framework / sessions / edf262ee7a2084a923bb967b938f54cb19f6b37d): akış açılamadı: Böyle bir dosya veya dizin yok

Bu sorunu daha önce hiç yaşamadım, neyin neden olduğunu bilmiyorum, nasıl düzelteceğimi de bilmiyorum, bir çözüm için çevrimiçi olarak internette araştırdım ama şimdiye kadar hiçbir şey bulamadım.


Depolama klasörlerini yeniden oluşturmanız gerekir, bunlar .gitignore dosyanızdadır, bu nedenle bir projeyi klonladığınızda kopyalanmayacaktır (
depoya

Yanıtlar:


521

Takip etmeyi dene:

şu klasörleri depolama / çerçeve altında oluşturun:

  • sessions
  • views
  • cache

Şimdi çalışmalı


22
Bunu php artisan cache ile birleştirdim: clear ve php artisan config: clear ve php artisan view: clear and php artisan view: clear from the answer and then
work

Depolama klasörünü manuel olarak silebilir ve cmd aracılığıyla "php artisan storage: link" komutunu çalıştırabilirsiniz. Ardından yukarıda önerildiği gibi klasörler oluşturun. Daha iyisi, önceki Depolama klasörünü yedek olarak saklayabilir ve daha sonra çerçeve klasörünü yeni Depolama yoluna kopyalayıp yapıştırabilirsiniz.
Niladri Banerjee - Uttarpara

Tam olarak bu sorunu yaşadım ve düzeltme işe yaradı, sürekli geçici dosya değiştirme içeriği nedeniyle tüm çerçeve klasörünü subversion ürünümden kasıtlı olarak hariç tutmanın bir sonucuydu. Sonra reproyu yeni bir sistemde kurmak, doğal olarak bu klasörlerin mevcut olmamasına neden oldu.
Paylaşacağımı

3
git boş klasörleri klonlamaz! Bu 3 klasör için bir file folder.keeper oluşturacağım.
Tiefan Ju

Evet, çünkü bu klasörün
sürümünün çıkarılmasına

47

Bunu dene:

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

12
Benim için çalışmadı. Var [InvalidArgumentException] Please provide a valid cache path. tekrar
MattCochrane

Benim durumumda bir kabus var php artisan cache:clear!
Ben

34

Görünüşe göre, projemi çoğaltırken olan şey, depolama klasörümdeki çerçeve klasörü yeni dizine kopyalanmadı, bu benim hatama neden oldu.


Aynı şey rutin yaptığım zaman da bana oldu composer update. Henüz çözüm yok.
Peter

Tüm yollarınızı iki kez kontrol edin ve hiçbir yerde eksik klasör veya dosya olmadığından emin olun.
user3718908

4
ayrıca çerçeve klasörünün ilgili izinlere sahip tüm alt dizinlere sahip olup olmadığını kontrol edin
manix

Sorunumun, Laravel 5.2.40 laraver.xyz/projects/Laravel/versions/v5.2.40'taki "Görünüm önbellek yolu boşsa istisnayı at" ile ilgisi var gibi görünüyor. Değişikliği geri alamıyorum - tüm oluşturucuyu yükselttikten sonra veya esnaf yorumları başarısız
Peter

benim durumumda uygulamada depolama dizinindeki klasörler eksikti
Chaudhry Waqas

24

Kendi düzenleyebilirsiniz readme.md bu gibi diğer ortamında laravel uygulamayı yüklemek için talimatları ile:

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

```


18

Bu hatanın nedeni Illuminate \ View \ Compilers \ Compiler.php dosyasından izlenebilir.

public function __construct(Filesystem $files, $cachePath)
{
    if (! $cachePath) {
        throw new InvalidArgumentException('Please provide a valid cache path.');
    }

    $this->files = $files;
    $this->cachePath = $cachePath;
}

Yapıcı, Illuminate \ View \ ViewServiceProvider konumunda BladeCompiler tarafından çağrılır.

/**
 * 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']);
    });
}

Bu nedenle, aşağıdaki kodu geriye doğru izleyerek:

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

standart laravel yapısını kullanıyorsanız, genellikle /config/view.php dosyanızda bulunur.

<?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 (...) , yol yoksa yanlış döndürür. Böylece, çağırmak

'Please provide a valid cache path.' error.

Bu nedenle, bu hatadan kurtulmak için yapabilecekleriniz,

storage_path('framework/views')

veya

/storage/framework/views

var :)


Teşekkür ederim! Bu benim için çalıştı. Her adımdan nasıl geçtiğini sevdim.
HamzStramGram

15

"Çerçeve" içinde klasörler oluşturmanız gerekir. Lütfen şu adımları izleyin:

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

Ayrıca Laravel'in bu dizine veri yazmasına izin vermek için izinler ayarlamanız gerekir.

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

777 izinleriyle, aynı sunucuda bulunan herhangi birinin dosyayı okuyabileceği, yazabileceği ve çalıştırabileceği anlamına gelir.
Sohail Ahmed

1
sessionsdizin çoğul durumda değilsession
Evgeniy Maynagashev

1
@Evgeniy Maynagashev, Evet haklısın. Yazım hatasıydı, sadece yazım hatası düzeltildi. Teşekkürler
Sohail Ahmed

9

Takip etmeyi dene:

şu klasörleri depolama / çerçeve altında oluşturun:

  • seanslar
  • Görüntüleme
  • önbellek / veri

hala çalışmıyorsa o zaman dene

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

önbelleği temizleyememe hatası alırsanız. Önbellekte / verilerde bir klasör verisi oluşturduğunuzdan emin olun


8

Bu klasörleri oluşturmadıysanız, aşağıdaki klasörlerin mevcut olup olmadığını kontrol edin.

  • depolama / çerçeve / önbellek
  • depolama / çerçeve / oturumlar
  • depolama / çerçeve / test
  • depolama / çerçeve / görünümler

7

Depolama klasörü ve alt klasörleri oturumları , görünümleri ve önbellek içinde çerçeve klasörü oluşturduğumda sorunu çözdüm .

Cmd'nize veya terminale gidin, ardından proje kök yolunuzu yazın ve ardından aşağıdakileri yazın:

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

Proje kök yolunuza tekrar gidin ve besteci güncellemesini çalıştırın

Bundan sonra zanaatkar mükemmel çalışıyor.


6

Depolama dizininde aşağıdaki klasörleri sağlayın :

  • kütükler
  • çerçeve
  • çerçeve / önbellek
  • çerçeve / önbellek / veri
  • çerçeve / oturumlar
  • çerçeve / test
  • çerçeve / görünümler

Aşağıda sizin için işe yarayan bir komut satırı parçacığı var

cd storage
mkdir logs
mkdir framework
mkdir framework/cache && framework/cache/data
mkdir framework/sessions
mkdir framework/testing
mkdir framework/views
chgrp -R www-data ../storage
chown -R www-data ../storage

5

Lütfen terminalde çalıştırın,

   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

Şimdi izni değiştirmek zorundasın,

   sudo chmod -R 777 storage

Dinamik olarak oluşturmak istiyorsanız, $paths = ["storage","storage/framework", "storage/framework/sessions", "storage/framework/views", "storage/framework/cache", "storage/framework/cache/data", "storage/logs", "storage/fonts"]; `foreach ($ yol olarak $ yollar) {` `if (! File :: isDirectory ($ yol)) {` File::makeDirectory($path, 0777, true, true); } }
Rashed Zaman


1

Benim tarafımdaki sorun (localhost'a dağıtırken): görünümler klasörü eksikti .. bu yüzden çerçeve klasörünüz yoksa klasör eklemeniz gerekecek. ancak zaten çerçeve klasörü mevcutsa, yukarıdaki tüm klasörlerin, yani 1. önbellek 2. oturum 3. görünümlerin

çerçeve dizininizde var.


0

Bu sorunu şu satırı ekleyerek çözdüm index.php:

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

0

Depolama dizininiz eksik olabilir veya alt dizinlerinden biri olabilir. Depolama dizini, Laravel kurulumuyla birlikte gönderilen tüm alt dizinlere sahip olmalıdır.


0

1. adım :php artisan storage:link

2. adım : bu klasörleri depolama klasöründe oluşturun

Depolama dizininde aşağıdaki klasörleri sağlayın:

logs
framework
framework/cache 
framework/sessions 
framework/views

Benim için çalıştı


0

Depolama klasörü uygulama ve çerçeve klasörüne ve gerekli izne sahip olmayabilir. Çerçeve klasörünün içinde önbellek, oturumlar, testler ve görünümler bulunur. bu işe yarayacaktır aşağıdaki komutu kullanın.

Use command line to go to your project root: 
cd {your_project_root_directory}
Now copy past this command as it is: 
cd storage && mkdir app && cd app && mkdir public && cd ../ && mkdir framework && cd framework && mkdir cache && mkdir sessions && mkdir testing && mkdir views && cd ../../ && sudo chmod -R 777 storage/

Umarım bu kullanımınızı çözer.


0

Bir üretim sunucusunda bir projeyi kopyaladıktan sonra da benzer bir durum yaşadım. Ortak klasöre, sembolik bir bağlantı aracılığıyla Apache tarafından erişildi.

Apache veya PHP hizmeti için projenin yolu değişmedi, bu nedenle eski proje havuzuna giden önbelleğe alınmış dosya yollarını kullandılar.

Apache ve PHP hizmetinin yeniden başlatılması sorunu çözdü.


-1

2 sentim

Depodaki her şeyi çıkarın ve ardından şunu yapın:

> 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

Benim için çalıştı =)


-3

Hata: 'Lütfen geçerli bir önbellek yolu sağlayın.' hata.

Bu tür bir hata gelirse, aşağıda verilen çözüm: -

lütfen depolama / çerçeve / önbellek içinde veri klasörü oluşturun


2
Stack Overflow'a hoş geldiniz! Lütfen sadece çözümü değil, bunu nasıl bulduğunuzla ilgili en azından birkaç kelimeyi içeren cevaplar verin.
zixuan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.