ChatGPT解决这个技术问题 Extra ChatGPT

laravel中的“请提供有效的缓存路径”错误

我复制了一个工作的 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 文件中,因此在克隆项目时不会被复制(因为它们永远不会被推送到 repo)

N
Novocaine

尝试以下操作:

在 storage/framework 下创建这些文件夹:

会话

意见

缓存

现在它应该可以工作了


我将它与下面的答案中的 php artisan cache:clear 和 php artisan config:clear 和 php artisan view:clear 结合起来,然后它就起作用了
您可以手动删除 storage 文件夹并通过 cmd 运行“php artisan storage:link”命令。然后按照上面的建议创建文件夹。更好的是,您可以将以前的存储文件夹保留为备份,然后再复制 - 将框架文件夹粘贴到新的存储路径中。
我确实遇到了这个问题并且修复工作,这是故意从我的颠覆产品中排除整个框架文件夹的结果,因为它不断的临时文件更改内容。然后在新系统上设置复制自然会导致这些文件夹不存在。以为我会分享...
git 不会克隆空文件夹!我将为这 3 个文件夹创建一个文件 folder.keeper。
还要确保在缓存下添加“数据”文件夹,以防止出现以下错误“无法清除缓存。确保您具有适当的权限”
t
thefallen

尝试这个:

php artisan 缓存:清除 php artisan 配置:清除 php artisan 视图:清除


没有为我工作。我得到了[InvalidArgumentException] Please provide a valid cache path。再次
在我的情况下,如果运行 php artisan cache:clear,就会做噩梦!
大声笑...运行此命令也会给出相同的错误
在运行此命令之前。在存储/框架下创建这些文件夹:1)会话 2)视图 3)缓存
g
ghabx

可以从 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

存在:)


u
user3785966

确保存储目录中的以下文件夹:

日志

框架

框架/缓存

框架/缓存/数据

框架/会话

框架/测试

框架/视图

下面是一个为你做的命令行片段

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

或者:``` export STORAGE_PATH='/path/tostorage/dir' mkdir -p ${STORAGE_PATH}/{logs,framework/{cache/data,sessions,testing,views}} chgrp -R www-data ${STORAGE_PATH } chown -R www-data ${STORAGE_PATH} ```
R
Ranjan Fadia

运行这些命令来创建所需的目录:

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

而已!


根据所使用的组,使用 755 可能会更好。
A
Alex Benincasa Santos

您可以编辑您的 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

```

S
Sohail Ahmed

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

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

您还需要设置权限以允许 Laravel 在此目录中写入数据。

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

M
Mohsin Younas

尝试以下操作:

在 storage/framework 下创建这些文件夹:

会话

意见

缓存/数据

如果仍然不起作用,请尝试

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

如果出现无法清除缓存的错误。确保在缓存/数据中创建文件夹数据


r
rfkortekaas

检查以下文件夹是否存在,如果不存在则创建这些文件夹。

存储/框架/缓存

存储/框架/会话

存储/框架/测试

存储/框架/视图


N
Ndifon Desmond Yong

从清除缓存开始

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

如果它不起作用,请确保以下所有文件夹都可用

logs
framework
framework/cache 
framework/sessions 
framework/views

如果所有建议都不起作用,请验证配置文件 config/view.php 是否存在。如果没有,您可以为您正在使用的 Laravel 获取此文件的副本,并将其复制到项目配置文件夹中。


b
borisoft82

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

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

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

再次返回您的项目根路径并运行 composer update

之后,工匠完美地工作。


T
Tansy Z

步骤 1、创建这些文件夹

mkdir -p 存储/{应用程序、框架、日志}

mkdir -p 存储/框架/{会话、视图、缓存}

chmod -R 777 存储

第二步、清除缓存/config/view

php工匠缓存:清除

php工匠配置:清除

php工匠视图:清除


在任何情况下,都不要向系统上的所有用户授予完全写入权限,这就是您在此处使用 chmod -R 777 所做的事情。这是一个被黑客攻击的邀请,因为您的 Web 服务器进程用户现在也可以在那里写信。
R
Rashid Iqbal

第 1 步php artisan storage:link

第 2 步:在 storage 文件夹中创建这些文件夹

确保存储目录中的以下文件夹:

logs
framework
framework/cache 
framework/sessions 
framework/views

它对我有用


R
Rashed Zaman

请在终端运行,

   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); } }
在任何情况下,都不要向系统上的所有用户授予完全写入权限,这就是您在此处使用 chmod -R 777 所做的事情。这是一个被黑客攻击的邀请,因为您的 Web 服务器进程用户现在也可以在那里写信。
0
0x0147k3r

我的 2 美分

删除存储中的所有内容,然后执行以下操作:

> cd storage/
> mkdir -p framework/{sessions,views,cache}
> chmod -R 755 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

为我工作=)


感谢更新!以这种方式了解 777 的不安全性比通过艰难的方式更好,对吧? :-)
F
Farid Abbas

我这边的问题(在本地主机上部署时):缺少视图文件夹..因此,如果您没有框架文件夹,则需要添加文件夹。但如果已经存在框架文件夹,请确保所有上述文件夹,即 1. 缓存 2. 会话 3. 视图

存在于您的框架目录中。


O
Ostap Brehin

如果这发生在服务器上:

sudo mkdir logs framework framework/cache framework/sessions framework/views
sudo chgrp -R www-data storage
sudo chmod -R ug+rwx storage

C
Cà phê đen

我通过在 index.php 中添加这一行解决了这个问题:

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

D
Das_Geek

您的存储目录或其子目录之一可能丢失。存储目录必须包含 Laravel 安装附带的所有子目录。


S
Sujon Chondro Shil

可能是存储文件夹没有应用程序和框架文件夹和必要的权限。在框架文件夹内,它包含缓存、会话、测试和视图。使用以下命令这将起作用。

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/

我希望这能解决您的使用问题。


在任何情况下,都不要向系统上的所有用户授予完全写入权限,这就是您在此处使用 chmod -R 777 所做的事情。这是一个被黑客攻击的邀请,因为您的 Web 服务器进程用户现在也可以在那里写信。
K
Karkan

在生产服务器上复制项目后,我也遇到了类似的情况。 Apache 通过符号链接访问了公共文件夹。

对于 Apache 或 PHP 服务,项目的路径没有改变,因此他们使用了指向旧项目存储库的缓存文件路径。

重新启动 Apache 和 PHP 服务解决了这个问题。


M
Mélissa

第 1 步:php artisan 存储:链接

第 2 步:在 storage 文件夹中创建这些文件夹

确保存储目录中的以下文件夹:

日志框架框架/缓存框架/会话框架/视图它对我有用

这也对我有用


f
free2idol1

在我的情况下,boostrap/cache 中的配置缓存文件全部丢失...所以我的解决方案是 php artisan config:cache 在 boostrap/cache 中重新创建缓存文件。


u
user13483704

错误:'请提供有效的缓存路径。'错误。

如果出现这些类型错误,那么下面给出的解决方案:-

请在 storage/framework/cache 中创建数据文件夹


欢迎来到堆栈溢出!请提供的答案不仅包括解决方案,还包括您如何发现这一点的至少几句话。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅