【问题标题】:Laravel 7 - Class hash does not existLaravel 7 - 类哈希不存在
【发布时间】:2020-07-10 01:09:22
【问题描述】:

我有一个新创建的 Laravel 应用程序,其中安装了 Backpack。在过去的几天里,我一直在努力将其部署到 Google Cloud。

我正在使用 Laravel 7,我正在尝试部署到 Google 云 App Engine 并收到 Class hash does not exist 错误。有几次我也收到了Class view does not exist。

我很确定这与部署环境有关,而不是我的更改。之所以这么说,是因为今天早上我更新了backpack/crud版本,部署后应用运行成功了。

所以只是为了测试,我再次部署,没有做任何更改,上传了零个文件,我遇到了同样的问题!

如果有人能指点我可以尝试的方法,那就太好了。

2020/07/09 23:42:46 [error] 20#20: *1 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught ReflectionException: Class hash does not exist in /srv/vendor/laravel/framework/src/Illuminate/Container/Container.php:805
Stack trace:
#0 /srv/vendor/laravel/framework/src/Illuminate/Container/Container.php(805): ReflectionClass->__construct('hash')
#1 /srv/vendor/laravel/framework/src/Illuminate/Container/Container.php(687): Illuminate\Container\Container->build('hash')
#2 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(796): Illuminate\Container\Container->resolve('hash', Array, true)
#3 /srv/vendor/laravel/framework/src/Illuminate/Container/Container.php(633): Illuminate\Foundation\Application->resolve('hash', Array)
#4 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(781): Illuminate\Container\Container->make('hash', Array)
#5 /srv/vendor/laravel/framework/src/Illuminate/Container/Container.php(1280): Illuminate\Foundation\Application->make('hash')
#6 /srv/vendor/laravel/framework/src/Illuminate/Auth/CreatesUserPro...PHP message: PHP Fatal error:  Uncaught ReflectionException: Class hash does not exist in /srv/vendor/laravel/framework/src/Illuminate/Container/Container.php:805

我的 composer.json -

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.2.5",
        "backpack/crud": "4.1.*",
        "backpack/permissionmanager": "^6.0",
        "fideloper/proxy": "^4.2",
        "fruitcake/laravel-cors": "^1.0",
        "guzzlehttp/guzzle": "^6.3",
        "intervention/image": "^2.5",
        "laravel/framework": "^7.0",
        "laravel/tinker": "^2.0",
        "superbalist/laravel-google-cloud-storage": "^2.2"
    },
    "require-dev": {
        "backpack/generators": "^3.1",
        "facade/ignition": "^2.0",
        "fzaninotto/faker": "^1.9.1",
        "laracasts/generators": "^1.1",
        "mockery/mockery": "^1.3.1",
        "nunomaduro/collision": "^4.1",
        "phpunit/phpunit": "^8.5"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ],
        "post-install-cmd": [
            "composer clearcache",
            "chmod -R 755 bootstrap\/cache",
            "php artisan cache:clear",
            "php artisan config:clear"
        ]
    }
}

【问题讨论】:

  • 似乎更多的是由于某种原因没有设置容器上的“哈希”绑定
  • 在应用文件夹中搜索“use Hash;”我发现一个没有被使用的电话,我刚刚删除它,问题就消失了。

标签: laravel google-app-engine gcloud


【解决方案1】:

我经常遇到类似的问题。虽然不完全相同,但可能足够相似,这将为您解决问题。对我来说,这通常是构建的缓存问题。

如果在作曲家更新后发生这种情况,并且您忘记执行 --no-dev 并在下次更新时删除内容,则可能会发生此错误。

修复:

无论是 no-dev 问题,还是构建的一般缓存问题,手动进入 bootstrap/cache 文件夹并删除文件,尤其是包文件。或者,如果你将环境设置为DEV,而你实际上并没有拉入开发包,则返回并更新作曲家(无开发)

或者,如果您仍然卡住,您可以尝试在没有脚本的情况下更新 composer 然后安装。 就我而言,一旦它仍在尝试加载调试栏。

【讨论】:

  • 我没有使用--no-dev 安装任何东西。我注意到在bootstrap/cache 中部署后缺少config.php。这可能是问题吗?我能做些什么来强制它重新生成?
  • 回答我自己的问题,bootstrap/cache 不需要config.php。
  • --no-dev 让我着迷。但问题实际上是在作曲家安装后缓存系统出现故障——不一定来自--no-dev。在任何一种情况下,如果我删除 packages.php 这对我来说解决了 90% 的问题。如果这对您不起作用,则可能是一个不相关的问题。
猜你喜欢
  • 2020-06-28
  • 1970-01-01
  • 2017-05-14
  • 2012-04-10
  • 2015-04-05
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多