请提供有效的缓存路径


152

我复制了一个可运行的laravel应用,并将其重命名为用于另一个应用。我删除了供应商文件夹,然后再次运行以下命令:

composer self-update

composer-update

npm install

bower install

我正确配置了路线和所有内容,但是现在当我尝试在浏览器中运行应用程序时,出现以下错误:

Compiler.php第36行中的InvalidArgumentException:请提供有效的缓存路径。

Filesystem.php第111行中的ErrorException:file_put_contents(F:\ www \ example \ app \ storage \ framework / sessions / edf262ee7a2084a923bb967b938f54cb19f6b37d):无法打开流:没有此类文件或目录

我以前从未遇到过此问题,我也不知道是什么原因引起的,也不知道如何解决它,我已经在网上搜索了一个解决方案,但到目前为止还没有找到。


您需要重建存储文件夹,它们位于您的.gitignore文件中,因此在克隆项目时不会被复制(因为它们从未被推送到存储库中)
twigg 17-02-28

Answers:


488

尝试以下方法:

存储/框架下创建以下文件夹

  • sessions
  • views
  • cache

现在应该可以了


21
我将其与php artisan cache:clear和php artisan config:clear和php artisan view:clear结合使用,从下面的答案中清除,然后它起作用了
cja 2016年

您可以手动删除存储文件夹,然后通过cmd运行“ php artisan storage:link”命令。然后按照上面的建议创建文件夹。更好的是,您可以将之前的Storage文件夹保留为备份,以后再复制-将Framework文件夹粘贴到新的Storage路径中。
Niladri Banerjee-Uttarpara

我确实遇到了这个问题,并且已解决问题,这是由于其不断更改临时文件的内容而故意将整个Framework文件夹从Subversion产品中排除的结果。然后在新系统上设置repro,自然会导致这些文件夹不存在。以为我会分享...
AdamJones

3
git不会克隆空文件夹!我将为这3个文件夹创建一个folder.keeper文件。
Tiefan Ju '18

是的,因为不需要对此文件夹进行版本控制
Mauricio Wanderley Martins '18

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 '17

就我而言,如果逃跑,那将是一场噩梦php artisan cache:clear

32

所以很明显发生了什么事,当我复制项目时,存储文件夹中的framework文件夹没有复制到新目录中,这导致了我的错误。


当我做例行公事时,我也发生了同样的事情composer update。尚无解决方案。
彼得

仔细检查所有路径,并确保所有位置都没有丢失的文件夹或文件。
user3718908 '16

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

```

您保存了我的一天:)
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']

如果使用标准的laravel结构,通常位于/config/view.php中。

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

存在:)


9

您需要在“框架”内创建文件夹。请按照以下步骤操作:

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


6

当我在存储文件夹及其子文件夹会话视图缓存中创建框架文件夹时,我解决了该问题。

转到您的cmd或终端,然后键入您的项目根路径,然后键入以下内容:

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

再次返回项目根路径,然后运行composer update

在那之后,工匠就完美地工作了。


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


1

我这边的问题(在localhost上部署时):缺少views文件夹..因此,如果您没有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
欢迎使用Stack Overflow!请提供不仅包括解决方案的答案,而且至少包含关于您如何找到答案的几句话。
子轩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.