未捕获的ReflectionException:使者部署中不存在类哈希 [英] Uncaught ReflectionException: Class hash does not exist in envoyer deploy

查看:94
本文介绍了未捕获的ReflectionException:使者部署中不存在类哈希的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我像往常一样使用envoyer进行部署.一个警告是在我本地主机开发期间(以及在我切换git分支时)..我遇到了这个错误:

I'm deploying using envoyer as usual. The one caveat is that during my local host development (and while i was switching git branches).. I faced this error:

[ReflectionException]类App \ Http \ Controllers \ Admin \ BatchUpdateStoresController不存在

[ReflectionException] Class App\Http\Controllers\Admin\BatchUpdateStoresController does not exist

我通过清除路由缓存解决了它(请参阅详细信息

I solved it by clearing the routes cache (see details here).

现在的问题是,当我在envoyer上部署时..我在nginx日志中收到此错误:

The problem now is that when I deployed on envoyer.. I'm getting this error on the nginx logs:

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错误日志).

I tried deleting the /home/forge/default/envoyer/releases/20180306221058/bootstrap folder all together.. but that made it only worse (ie i wasn't even getting nginx error logs anymore).

我该怎么办?

推荐答案

事实证明,我添加了作曲家,并将其服务提供商和别名添加到config/app.php中,如下所示:

it turns out that i add a library to composer and added its service provider and alias to config/app.php like so:

'providers'       => [
 ..
    Clockwork\Support\Laravel\ClockworkServiceProvider::class,

'aliases'         => [ 
..
    'Clockwork'        => Clockwork\Support\Laravel\Facade::class,

,但后来又从作曲家中删除了该库(b/c,我停止使用它),却忘记了更新服务提供商.

but then later on removed that library from composer (b/c i stopped using it) and forgot to update the service provider.

更新服务提供商即可解决问题.

Updating the service provider solved the problem.

我的一位工程师在处理请求(其中有100次提交)时又遇到了同样的问题(这是一个主题分支.请不要判断).

I got the same problem again from one of my engineers working on a Pull Request that has like 100 commits in it (it's a topic branch.. please don't judge).

他确认所有库都已使用.

He affirmed that all the libraries are used.

所以我所做的是,我只对两个特定文件运行了git diff,只在较大范围内:config/app.phpcomposer.json,如下所示:

So what I did is that I simply ran a git diff on two specific files only amongst that large range: config/app.php and composer.json like so:

$ 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": {

config/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要求包括在内,但在将其注册为服务提供者时不检查env是否是dev ..因此它被炸掉了.

so the problem was clear: basically we're including "orangehill/iseed": "2.2", as a require-dev requirement, but not checking if the env is dev when we register it as a service provider.. so it blew up.

因此将其固定在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

有时您必须删除整个引导目录

bonus 2

sometimes you have to remove the entire bootstrap directory

rm -rf bootstrap

然后运行

composer dump-autoload

但是laravel在那之后将不起作用,因此您必须git恢复还原删除所有引导程序的更改(无论如何,它应该在git repo中)..之后您就很高兴了

but laravel won't work after that, so you must git revert the change of deleting all of bootstrap (which should be in your git repo anyways).. and you're golden after that

这篇关于未捕获的ReflectionException:使者部署中不存在类哈希的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆