php上的Laravel 5 artisan配置:清除生成的Closure::__set_state()错误


Laravel 5 on php artisan config:clear generated Closure::__set_state() error

我的代码在生产中,我运行了

php artisan config:clear

在那之后,我的代码就没有运行了。索引页面和所有其他页面都变成了白色屏幕,并在firebug中给出了500内部服务器错误。当我尝试运行时

php artisan

它给我的错误是

PHP Fatal error:  Call to undefined method Closure::__set_state() in /var/www/live/vendor/config.php on line 56

我的代码正在生产中/vendor/config.php文件以前不存在,该代码发生了什么??你遇到过这样的错误吗?我已授予存储/文件夹和供应商/的所有权限。如有任何帮助/指导,我们将不胜感激。

我在运行php artisan config:cache时遇到了类似的问题。显然,当应用程序试图加载缓存的配置文件中有闭包时,这是一个问题。Laravel不会解决这个问题,因为在配置文件中包含闭包是一种糟糕的做法。请参阅此Github问题

我解决这个问题的方法是撤消它。

删除配置的缓存。

它就在这里

bootstrap/cache/config.php

vendor/config.php

我过去也遇到过类似的问题,不知道是什么原因导致的,但现在你可以从/vendor中删除config.php,它不会破坏你的代码。

您的代码将开始工作。。

在其他根本原因中,当Laravel试图加载的任何配置文件中定义了闭包时,调用php artisan config:cache会导致此错误。Laravel不允许在配置文件中使用闭包;参见:

https://github.com/laravel/framework/issues/9625

删除结果缓存文件(通常位于bootstrap/cache/config.php)可以"修复"错误。

长期的解决方案是从所有配置文件中消除闭包。如错误消息中所述,可以通过检查有问题的行来确定有问题的配置文件。

如果有问题的文件是第三方文件,最好打开库的问题,以便在上游解决问题。

以下是我解决它的方法:

  1. 转到/vvendor/tymon/jwt-auth/src/config/config.php,将storageauth的行替换为:

'auth' => 'Tymon'JWTAuth'Providers'Auth'IlluminateAuthAdapter',
'storage' => 'Tymon'JWTAuth'Providers'Storage'IlluminateCacheAdapter'

  1. 转到/bootstrap/cache/config.php并将其删除
  2. 按顺序运行以下命令:
    A) php artisan config/cache
    B) php artisan jwt:generate
    C) php artisan vendor:publish --provider="Tymon'JWTAuth'Providers'JWTAuthServiceProvider"

这样就可以了!

尝试从bootstrap/cache文件夹中删除config.php。它对我有效。

编辑vendor'laravel'framework'src'Illuminate'Foundation'Support'Providers'RouteServiceProvider.php:108并且需要删除。

vendor/tymon/jwt-auth/src/config中的config.php文件更改为此

'auth' => Tymon'JWTAuth'Providers'Auth'IlluminateAuthAdapter::class` 

和这个

'storage' => Tymon'JWTAuth'Providers'Storage'IlluminateCacheAdapter::class` 

在运行php artisan config:cache之前对我有效。

使用解决

composer update
composer install