未捕获的 ReflectionException:特使部署中不存在类哈希
Posted
技术标签:
【中文标题】未捕获的 ReflectionException:特使部署中不存在类哈希【英文标题】:Uncaught ReflectionException: Class hash does not exist in envoyer deploy 【发布时间】:2018-08-14 21:55:12 【问题描述】:我像往常一样使用 envoyer 进行部署。需要注意的是,在我的本地主机开发过程中(当我切换 git 分支时).. 我遇到了这个错误:
[ReflectionException] 类 App\Http\Controllers\Admin\BatchUpdateStoresController 不存在
我通过清除路由缓存解决了这个问题(详见here)。
现在的问题是,当我在 envoyer 上部署时.. 我在 nginx 日志上收到此错误:
php message: PHP Fatal error: Uncaught ReflectionException: Class hash does not exist in /home/forge/default/envoyer/releases/20180306221058/bootstrap/cache/compiled.php:1479
Stack trace:
#0 /home/forge/default/envoyer/releases/20180306221058/bootstrap/cache/compiled.php(1479): ReflectionClass->__construct('hash')
#1 /home/forge/default/envoyer/releases/20180306221058/bootstrap/cache/compiled.php(1433): Illuminate\Container\Container->build('hash', Array)
#2 /home/forge/default/envoyer/releases/20180306221058/bootstrap/cache/compiled.php(2011): Illuminate\Container\Container->make('hash', Array)
#3 /home/forge/default/envoyer/releases/20180306221058/bootstrap/cache/compiled.php(1686): Illuminate\Foundation\Application->make('hash')
#4 /home/forge/default/envoyer/releases/20180306221058/bootstrap/cache/compiled.php(524): Illuminate\Container\Container->offsetGet('hash')
#5 /home/forge/default/envoyer/releases/20180306221058/bootstrap/
我尝试将/home/forge/default/envoyer/releases/20180306221058/bootstrap
文件夹全部删除.. 但这只会让情况变得更糟(即我什至没有收到 nginx 错误日志了)。
我该怎么办?
【问题讨论】:
这是最近升级到 5.6 的版本吗? 【参考方案1】:事实证明,我向 composer 添加了一个library,并将其服务提供者和别名添加到 config/app.php,如下所示:
'providers' => [
..
Clockwork\Support\Laravel\ClockworkServiceProvider::class,
'aliases' => [
..
'Clockwork' => Clockwork\Support\Laravel\Facade::class,
但后来从作曲家中删除了该库(b/c 我停止使用它)并忘记更新服务提供者。
更新服务提供者解决了这个问题。
奖金
我的一位工程师在处理一个包含大约 100 次提交的 Pull Request 时再次遇到了同样的问题(这是一个主题分支。请不要判断)。
他确认所有库都已使用。
所以我所做的是,我只是在两个特定文件上运行了一个 git diff,仅在那个大范围内:config/app.php
和 composer.json
,就像这样:
作曲家.json
$ git diff 96d397a bce2052 composer.json
diff --git a/composer.json b/composer.json
index 4c16f388..d780ec01 100644
--- a/composer.json
+++ b/composer.json
@@ -4,6 +4,12 @@
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
+ "repositories": [
+
+ "type": "vcs",
+ "url": "https://github.com/abbood/translation"
+
+ ],
"require":
"php": ">=5.5.9",
"laravel/framework": "5.3.*",
@@ -26,7 +32,9 @@
"aloha/twilio": "^2.1",
"laravel/socialite": "^2.0",
"barryvdh/laravel-dompdf": "^0.8.0",
- "mockery/mockery": "1.0"
+ "mockery/mockery": "1.0",
+ "maxmind-db/reader": "~1.0",
+ "waavi/translation": "dev-extractGenCode"
,
"require-dev":
"symfony/dom-crawler": "~3.1",
@@ -35,6 +43,7 @@
"phpunit/phpunit": "~5.0",
"phpspec/phpspec": "~2.1",
"johnkary/phpunit-speedtrap": "^1.0",
+ "orangehill/iseed": "2.2",
"barryvdh/laravel-ide-helper": "^2.4"
,
"autoload":
配置/app.php
git diff 96d397a bce2052 config/app.php
diff --git a/config/app.php b/config/app.php
index 5025f79b..28e34794 100644
--- a/config/app.php
+++ b/config/app.php
@@ -10,8 +10,8 @@ return [
| the framework needs to place the application's version in a notification
| or any other location as required by the application or its packages.
*/
+ 'version' => '1.3.57',
- 'version' => '1.3.46',
'env' => env('APP_ENV', 'production'),
@@ -115,6 +115,17 @@ return [
/*those options are overriden in bootstrap/app for info.log and error.log*/
'log' => 'daily',
+ /*
+ |--------------------------------------------------------------------------
+ | MaxMind mmdb Path
+ |--------------------------------------------------------------------------
+ |
+ | Here you specify the path to MaxMind GeoLite2-City.mmdb
+ |
+ |
+ */
+ 'maxmindDB' => env('APP_MAX_MIND_MMDB', "./maxmind/GeoLite2-City.mmdb"),
+
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
@@ -149,7 +160,6 @@ return [
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
- Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
@@ -180,7 +190,10 @@ return [
Davibennun\LaravelPushNotification\LaravelPushNotificationServiceProvider::class,
Aloha\Twilio\Support\Laravel\ServiceProvider::class,
Laravel\Socialite\SocialiteServiceProvider::class,
+ Orangehill\Iseed\IseedServiceProvider::class,
Barryvdh\DomPDF\ServiceProvider::class,
+ Waavi\Translation\TranslationServiceProvider::class,
+
],
/*
|--------------------------------------------------------------------------
@@ -239,6 +252,8 @@ return [
'Raven' => Jenssegers\Raven\Facades\Raven::class,
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
'PDF' => Barryvdh\DomPDF\Facade::class,
+ 'UriLocalizer' => \Waavi\Translation\Facades\UriLocalizer::class,
+ 'TranslationCache' => \Waavi\Translation\Facades\TranslationCache::class,
],
];
所以问题很清楚:基本上我们将"orangehill/iseed": "2.2",
作为require-dev
要求包括在内,但在我们将其注册为服务提供者时不检查环境是否为开发......所以它爆炸了。
所以这修复了app/Providers/AppServiceProvider.php
:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
$env = config('app.env');
if ($env === 'local' || $env === 'testing')
.. dev only libraries
$this->app->register(\Orangehill\Iseed\IseedServiceProvider::class);
奖金 2
有时您必须删除整个引导目录
rm -rf bootstrap
然后运行
composer dump-autoload
但之后 laravel 将无法工作,因此您必须 git revert 删除所有引导程序的更改(无论如何都应该在您的 git repo 中).. 之后您就很成功了
【讨论】:
【参考方案2】:升级到 5.6 后,我遇到了缺少的 Hash
类异常。问题是升级指南中被忽略的一步:
所有哈希配置现在都存放在其自己的 config/hashing.php 配置文件中。您应该将默认配置文件的副本放在您自己的应用程序中。最有可能的是,您应该将 bcrypt 驱动程序作为您的默认驱动程序。不过,也支持氩气。
【讨论】:
以上是关于未捕获的 ReflectionException:特使部署中不存在类哈希的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 错误:未捕获的 ReflectionException:类 App\Http\Kernel 不存在
未捕获的 ReflectionException:特使部署中不存在类哈希
Laravel 错误未捕获的异常 'ReflectionException' 并带有消息'Class App\Http\Kernel 不存在'
未捕获的 ReflectionException:类日志不存在 Laravel 5.2
在 vendor\laravel\framework\src\Illuminate\Container\Container.php 中未捕获的异常 'ReflectionException' 和消息