【问题标题】:"InvalidArgumentException" Please provide valid cache path in Laravel 8“InvalidArgumentException”请在 Laravel 8 中提供有效的缓存路径
【发布时间】:2021-11-25 10:37:06
【问题描述】:

在离开一个项目一周并返回(没有更改任何内容)后,我的 php artisan 停止工作。这只是这个特定项目的情况,因为php artisan 在其他项目中工作正常。当我想运行工匠命令时,我得到了一个

[InvalidArgumentException] Please provide valid cache path:

PS C:\Users\Artur\PhpstormProjects\stuttard.de> php artisan serve

   InvalidArgumentException 

  Please provide a valid cache path.

  at C:\Users\Artur\PhpstormProjects\stuttard.de\vendor\laravel\framework\src\Illuminate\View\Compilers\Compiler.php:36
     32▕      */
     33▕     public function __construct(Filesystem $files, $cachePath)
     34▕     {
     35▕         if (! $cachePath) {
  ➜  36▕             throw new InvalidArgumentException('Please provide a valid cache path.');
     37▕         }
     38▕
     39▕         $this->files = $files;
     40▕         $this->cachePath = $cachePath;

  1   C:\Users\Artur\PhpstormProjects\stuttard.de\vendor\laravel\framework\src\Illuminate\View\ViewServiceProvider.php:88
      Illuminate\View\Compilers\Compiler::__construct(Object(Illuminate\Filesystem\Filesystem))

  2   C:\Users\Artur\PhpstormProjects\stuttard.de\vendor\laravel\framework\src\Illuminate\Container\Container.php:869
      Illuminate\View\ViewServiceProvider::Illuminate\View\{closure}(Object(Illuminate\Foundation\Application), [])

This thread 建议在storage\framework 目录中创建3个文件夹:

  • 会话
  • 观看次数
  • 缓存

但我已经有了这些:

删除这些文件夹并重新创建它们没有帮助。

我能做什么?

编辑:

删除vendor 文件夹并运行composer install 在步骤@php artisan package:discover --ansi 处产生相同的exception

PS C:\Users\Artur\PhpstormProjects\stuttard.de> composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 111 installs, 0 updates, 0 removals
  - Installing doctrine/inflector (2.0.3): Extracting archive
  - Installing doctrine/lexer (1.2.1): Extracting archive
  - Installing symfony/polyfill-ctype (v1.23.0): Extracting archive
  - Installing webmozart/assert (1.10.0): Extracting archive
  - Installing dragonmantank/cron-expression (v3.1.0): Extracting archive
  - Installing symfony/polyfill-php80 (v1.23.1): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.23.1): Extracting archive
  - Installing symfony/var-dumper (v5.3.8): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.23.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.23.1): Extracting archive
  - Installing symfony/string (v5.3.7): Extracting archive
  - Installing psr/container (1.1.1): Extracting archive
  - Installing symfony/service-contracts (v2.4.0): Extracting archive
  - Installing symfony/polyfill-php73 (v1.23.0): Extracting archive
  - Installing symfony/deprecation-contracts (v2.4.0): Extracting archive
  - Installing symfony/console (v5.3.7): Extracting archive
  - Installing psr/log (2.0.0): Extracting archive
  - Installing monolog/monolog (2.3.5): Extracting archive
  - Installing voku/portable-ascii (1.5.6): Extracting archive
  - Installing phpoption/phpoption (1.8.0): Extracting archive
  - Installing graham-campbell/result-type (v1.0.2): Extracting archive
  - Installing vlucas/phpdotenv (v5.3.1): Extracting archive
  - Installing symfony/css-selector (v5.3.4): Extracting archive
  - Installing tijsverkoyen/css-to-inline-styles (2.2.3): Extracting archive
  - Installing symfony/routing (v5.3.7): Extracting archive
  - Installing symfony/process (v5.3.7): Extracting archive
  - Installing symfony/polyfill-php72 (v1.23.0): Extracting archive
  - Installing symfony/polyfill-intl-idn (v1.23.0): Extracting archive
  - Installing symfony/mime (v5.3.8): Extracting archive
  - Installing symfony/http-foundation (v5.3.7): Extracting archive
  - Installing symfony/http-client-contracts (v2.4.0): Extracting archive
  - Installing psr/event-dispatcher (1.0.0): Extracting archive
  - Installing symfony/event-dispatcher-contracts (v2.4.0): Extracting archive
  - Installing symfony/event-dispatcher (v5.3.7): Extracting archive
  - Installing symfony/error-handler (v5.3.7): Extracting archive
  - Installing symfony/http-kernel (v5.3.9): Extracting archive
  - Installing symfony/finder (v5.3.7): Extracting archive
  - Installing symfony/polyfill-iconv (v1.23.0): Extracting archive
  - Installing egulias/email-validator (2.1.25): Extracting archive
  - Installing swiftmailer/swiftmailer (v6.2.7): Extracting archive
  - Installing symfony/polyfill-php81 (v1.23.0): Extracting archive
  - Installing ramsey/collection (1.2.1): Extracting archive
  - Installing brick/math (0.9.3): Extracting archive
  - Installing ramsey/uuid (4.2.3): Extracting archive
  - Installing psr/simple-cache (1.0.1): Extracting archive
  - Installing opis/closure (3.6.2): Extracting archive
  - Installing symfony/translation-contracts (v2.4.0): Extracting archive
  - Installing symfony/translation (v5.3.9): Extracting archive
  - Installing nesbot/carbon (2.53.1): Extracting archive
  - Installing league/mime-type-detection (1.8.0): Extracting archive
  - Installing league/flysystem (1.1.5): Extracting archive
  - Installing nette/utils (v3.2.5): Extracting archive
  - Installing nette/schema (v1.2.1): Extracting archive
  - Installing dflydev/dot-access-data (v3.0.1): Extracting archive
  - Installing league/config (v1.1.1): Extracting archive
  - Installing league/commonmark (2.0.2): Extracting archive
  - Installing laravel/serializable-closure (v1.0.2): Extracting archive
  - Installing laravel/framework (v8.62.0): Extracting archive
  - Installing facade/ignition-contracts (1.0.2): Extracting archive
  - Installing facade/flare-client-php (1.9.1): Extracting archive
  - Installing facade/ignition (2.14.0): Extracting archive
  - Installing fakerphp/faker (v1.16.0): Extracting archive
  - Installing asm89/stack-cors (v2.0.3): Extracting archive
  - Installing fruitcake/laravel-cors (v2.0.4): Extracting archive
  - Installing psr/http-message (1.0.1): Extracting archive
  - Installing psr/http-client (1.0.1): Extracting archive
  - Installing ralouphie/getallheaders (3.0.3): Extracting archive
  - Installing psr/http-factory (1.0.1): Extracting archive
  - Installing guzzlehttp/psr7 (2.0.0): Extracting archive
  - Installing guzzlehttp/promises (1.4.1): Extracting archive
  - Installing guzzlehttp/guzzle (7.3.0): Extracting archive
  - Installing laravel/sail (v1.11.0): Extracting archive
  - Installing laravel/sanctum (v2.11.2): Extracting archive
  - Installing nikic/php-parser (v4.13.0): Extracting archive
  - Installing psy/psysh (v0.10.8): Extracting archive
  - Installing laravel/tinker (v2.6.2): Extracting archive
  - Installing hamcrest/hamcrest-php (v2.0.1): Extracting archive
  - Installing mockery/mockery (1.4.4): Extracting archive
  - Installing filp/whoops (2.14.4): Extracting archive
  - Installing nunomaduro/collision (v5.10.0): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing phpdocumentor/type-resolver (1.5.1): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.2.2): Extracting archive
  - Installing sebastian/version (3.0.2): Extracting archive
  - Installing sebastian/type (2.3.4): Extracting archive
  - Installing sebastian/resource-operations (3.0.3): Extracting archive
  - Installing sebastian/recursion-context (4.0.4): Extracting archive
  - Installing sebastian/object-reflector (2.0.4): Extracting archive
  - Installing sebastian/object-enumerator (4.0.4): Extracting archive
  - Installing sebastian/global-state (5.0.3): Extracting archive
  - Installing sebastian/exporter (4.0.3): Extracting archive
  - Installing sebastian/environment (5.1.3): Extracting archive
  - Installing sebastian/diff (4.0.4): Extracting archive
  - Installing sebastian/comparator (4.0.6): Extracting archive
  - Installing sebastian/code-unit (1.0.8): Extracting archive
  - Installing sebastian/cli-parser (1.0.1): Extracting archive
  - Installing phpunit/php-timer (5.0.3): Extracting archive
  - Installing phpunit/php-text-template (2.0.4): Extracting archive
  - Installing phpunit/php-invoker (3.1.1): Extracting archive
  - Installing phpunit/php-file-iterator (3.0.5): Extracting archive
  - Installing theseer/tokenizer (1.2.1): Extracting archive
  - Installing sebastian/lines-of-code (1.0.3): Extracting archive
  - Installing sebastian/complexity (2.0.2): Extracting archive
  - Installing sebastian/code-unit-reverse-lookup (2.0.3): Extracting archive
  - Installing phpunit/php-code-coverage (9.2.7): Extracting archive
  - Installing doctrine/instantiator (1.4.0): Extracting archive
  - Installing phpspec/prophecy (1.14.0): Extracting archive
  - Installing phar-io/version (3.1.0): Extracting archive
  - Installing phar-io/manifest (2.0.3): Extracting archive
  - Installing myclabs/deep-copy (1.10.2): Extracting archive
  - Installing phpunit/phpunit (9.5.10): Extracting archive
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi

   InvalidArgumentException

  Please provide a valid cache path.

  at C:\Users\Artur\PhpstormProjects\stuttard.de\vendor\laravel\framework\src\Illuminate\View\Compilers\Compiler.php:36
     32▕      */
     33▕     public function __construct(Filesystem $files, $cachePath)
     34▕     {
     35▕         if (! $cachePath) {
  ➜  36▕             throw new InvalidArgumentException('Please provide a valid cache path.');
     37▕         }
     38▕
     39▕         $this->files = $files;
     40▕         $this->cachePath = $cachePath;

  1   C:\Users\Artur\PhpstormProjects\stuttard.de\vendor\laravel\framework\src\Illuminate\View\ViewServiceProvider.php:88
      Illuminate\View\Compilers\Compiler::__construct(Object(Illuminate\Filesystem\Filesystem))

  2   C:\Users\Artur\PhpstormProjects\stuttard.de\vendor\laravel\framework\src\Illuminate\Container\Container.php:873
      Illuminate\View\ViewServiceProvider::Illuminate\View\{closure}(Object(Illuminate\Foundation\Application), [])
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1

【问题讨论】:

  • 你试过更新作曲家吗?
  • @ArjanShrestha 是的,结果完全相同。
  • 也许尝试删除供应商文件夹然后作曲家安装
  • @ArjanShrestha 我运行了命令,但是当composer 进程(?)php artisan 时,它以相同的exception 结束。请参阅编辑部分。
  • 检查你的laravel版本是否支持你当前的php版本

标签: php laravel laravel-8 laravel-artisan


【解决方案1】:

Laravel 需要有一个缓存目录来存储编译好的刀片模板。

pathconfig.view 文件中定义如下:

    'compiled' => env(
        'VIEW_COMPILED_PATH',
        realpath(storage_path('framework/views'))
    ),

您可能已经注意到,Laravel 首先查看 VIEW_COMPILED_PATH 环境变量(如果有的话),如果它不存在,则返回到 storage/framework/views

如果 Laravel(出于任何原因)无法获得正确的路径,那么它将抛出 InvalidArgumentException(查看框架 here)。

由于某种原因,您的项目中的 compiled 路径错误。

可能是 VIEW_COMPILED_PATH 环境变量设置为空/null 值:

VIEW_COMPILED_PATH=''

OR

VIEW_COMPILED_PATH=

更具体地说,compiled 条目返回一个空/null 值,跟踪它并检查返回值。

如果值是正确的,那么其他东西(例如中间件)可能已经修改了它。

为什么作曲家失败了

当你运行 composer install/update 时,laravel 使用 composer script post-autoload-dump 来运行 php artisan package:discover 命令。

php artisan package:discover 命令将重建缓存的包清单,因此它会点击已编译的视图以清除它们。

要解决此问题,您需要知道为什么config.view.compiled 条目返回无效值。

【讨论】:

  • 您好,感谢您的详尽解释。我不知道这是怎么发生的,因为我没有手动触摸env variable。我想我会重新创建项目的基础并复制组件。
  • IMO,你应该追查,不要建立新的基础;软件开发是一个学习过程,花点时间调试一下,看看为什么会这样。
【解决方案2】:

只需运行这些命令并检查。

php artisan optimize:clear

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 2021-02-18
    • 2016-12-20
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2021-12-31
    相关资源
    最近更新 更多