Laravel 5.1 到 5.2 升级报错

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/34465721/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 12:53:59  来源:igfitidea点击:

Laravel 5.1 to 5.2 upgrade error

phplaravelcomposer-phplaravel-5.1laravel-5.2

提问by Deveram

When I try to update our existing project from Laravel 5.1 to Laravel 5.2 using the official guide, I get an error after composer update when the post update

当我尝试使用官方指南将我们现有的项目从 Laravel 5.1 更新到 Laravel 5.2 时,我在发布后更新 composer update 后收到错误

php artisan clear-compiled

php artisan 清晰编译

is run. Here is the error.

正在运行。这是错误。

Class Illuminate\Foundation\Composer does not exist

类 Illuminate\Foundation\Composer 不存在

Has anyone had a similar problem? When I run composer update with the no scripts flag it updates regularly so it's a problem on the clear-compiled.

有没有人遇到过类似的问题?当我使用 no scripts 标志运行 composer update 时,它​​会定期更新,因此这是明确编译的问题。

Below are my Service Providers and my composer.json file.

下面是我的服务提供者和我的 composer.json 文件。

Service Providers

服务供应商

    Illuminate\Auth\AuthServiceProvider::class,
    Illuminate\Broadcasting\BroadcastServiceProvider::class,
    Illuminate\Bus\BusServiceProvider::class,
    Illuminate\Cache\CacheServiceProvider::class,
    Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
    Illuminate\Cookie\CookieServiceProvider::class,
    Illuminate\Database\DatabaseServiceProvider::class,
    Illuminate\Encryption\EncryptionServiceProvider::class,
    Illuminate\Filesystem\FilesystemServiceProvider::class,
    Illuminate\Foundation\Providers\FoundationServiceProvider::class,
    Illuminate\Hashing\HashServiceProvider::class,
    Illuminate\Mail\MailServiceProvider::class,
    Illuminate\Pagination\PaginationServiceProvider::class,
    Illuminate\Pipeline\PipelineServiceProvider::class,
    Illuminate\Queue\QueueServiceProvider::class,
    // Illuminate\Redis\RedisServiceProvider::class,
    Vetruvet\PhpRedis\PhpRedisServiceProvider::class,
    Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    Illuminate\Session\SessionServiceProvider::class,
    Illuminate\Translation\TranslationServiceProvider::class,
    Illuminate\Validation\ValidationServiceProvider::class,
    Illuminate\View\ViewServiceProvider::class,
    Collective\Html\HtmlServiceProvider::class,
    Laravel\Socialite\SocialiteServiceProvider::class,
    Intervention\Image\ImageServiceProvider::class,
    Torann\GeoIP\GeoIPServiceProvider::class,
    Jenssegers\Agent\AgentServiceProvider::class,
    Barryvdh\Debugbar\ServiceProvider::class,

composer.json

作曲家.json

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.2.*",
    "fzaninotto/faker": "^1.6@dev",
    "laravelcollective/html": "5.2.*",
    "laravelcollective/remote": "~5.2",
    "kriswallsmith/assetic": "^1.3@dev",
    "pda/pheanstalk": "^3.0@dev",
    "aws/aws-sdk-php-laravel": "~3.0",
    "illuminate/http": "~5.2",
    "illuminate/session": "~5.2",
    "illuminate/support": "~5.2",
    "nesbot/carbon": "~1.18",
    "guzzlehttp/guzzle": "~5.3|~6.0",
    "vetruvet/laravel-phpredis": "dev-master",
    "predis/predis": "^1.1@dev",
    "laravel/socialite": "^3.0@dev",
    "intervention/image": "^2.3@dev",
    "brightcove/api": "^1.0@dev",
    "torann/geoip": "dev-master",
    "graham-campbell/throttle": "~5.1",
    "jenssegers/agent": "^3.0@dev"
},
"require-dev": {
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "~4.0",
    "phpspec/phpspec": "~2.1",
    "symfony/dom-crawler": "~3.0",
    "symfony/css-selector": "~3.0",
    "barryvdh/laravel-debugbar": "^2.0@dev",
    "laracasts/generators": "dev-master"
},
"repositories": [
    {
        "type": "git",
        "url": "https://github.com/nardev/laravel-vzaar.git"
    }
],
"autoload": {
    "classmap": [
        "database",
        "app/Models",
        "app/Footgoll"
    ],
    "files": [
        "app/helpers.php"
    ],
    "psr-4": {
        "Myapp\": "app/"
    }
},
"autoload-dev": {
    "classmap": [
        "tests/TestCase.php"
    ]
},
"scripts": {
    "post-install-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ],
    "post-update-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ],
    "post-root-package-install": [
        "php -r \"copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "php artisan key:generate"
    ]
},
"config": {
    "preferred-install": "dist"
},
"minimum-stability": "dev",
"prefer-stable": true
}

When I run

当我跑

grep -nH -d recurse 'Composer' bootstrap/ app/ config/

grep -nH -d recurse 'Composer' bootstrap/ app/ config/

This is what is returned:

这是返回的内容:

bootstrap/autoload.php:7:| Register The Composer Auto Loader bootstrap/autoload.php:10:| Composer provides a convenient, automatically generated class loader bootstrap/autoload.php:42:| when working locally. However we will need to load in the Composer

bootstrap/autoload.php:7:| 注册 Composer Auto Loader bootstrap/autoload.php:10:| Composer 提供了一个方便的、自动生成的类加载器 bootstrap/autoload.php:42:| 在当地工作时。但是我们需要在 Composer 中加载

This is how the autoload.php file looks like:

这是 autoload.php 文件的样子:

    <?php

define('LARAVEL_START', microtime(true));

/*
|--------------------------------------------------------------------------
| Register The Composer Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/

require __DIR__.'/../vendor/autoload.php';

/*
|--------------------------------------------------------------------------
| Include The Compiled Class File
|--------------------------------------------------------------------------
|
| To dramatically increase your application's performance, you may use a
| compiled class file which contains all of the classes commonly used
| by a request. The Artisan "optimize" is used to create this file.
|
*/

$compiledPath = __DIR__.'/cache/compiled.php';

if (file_exists($compiledPath)) {
    require $compiledPath;
}

/*
|--------------------------------------------------------------------------
| Register The Workbench Loaders
|--------------------------------------------------------------------------
|
| The Laravel workbench provides a convenient place to develop packages
| when working locally. However we will need to load in the Composer
| auto-load files for the packages so that these can be used here.
|
*/
if (is_dir($workbench = __DIR__.'/../workbench'))
{
    Xtwoend\Workbench\Starter::start($workbench);
}

Could it be something about the workbench?

会不会是关于工作台的?

Update: a really horrible fix of returning the Composer.php from 5.1 to vendor/laravel/framework/src/Illuminate/Foundation lets the app function normally but I really need a better solution, one which can be pushed onto production.

更新:将 Composer.php 从 5.1 返回到 vendor/laravel/framework/src/Illuminate/Foundation 的一个非常可怕的修复让应用程序正常运行,但我真的需要一个更好的解决方案,一个可以推送到生产的解决方案。

采纳答案by Deveram

Welp, I just made a new laravel app with 5.2 and added all of the code and dependencies in again, seems to be working now.

好吧,我刚刚用 5.2 制作了一个新的 Laravel 应用程序,并再次添加了所有代码和依赖项,现在似乎可以正常工作了。

回答by Burak

The error you get is all about the packages that you use. Since the Composer class' location is changed, it is failed to get located.

你得到的错误都是关于你使用的包。由于 Composer 类的位置已更改,因此无法定位。

From the upgrade notes:

从升级说明:

The Illuminate\Foundation\Support\Composerclass has been moved to Illuminate\Support\Composer.

Illuminate\Foundation\Support\Composer班已移动到 Illuminate\Support\Composer

Wait for the pull requests to get accepted, for instance the laracasts/generatorspackage, which is included within your composer.jsonfile, is one of the packages that is not yet compatible with Laravel 5.2

等待拉取请求被接受,例如laracasts/generators包含在您的composer.json文件中的包是尚未与 Laravel 5.2 兼容的包之一

https://github.com/laracasts/Laravel-5-Generators-Extended/issues/81

https://github.com/laracasts/Laravel-5-Generators-Extended/issues/81

Thus, one of the most commonly used package where this error is occured is the cviebrock/eloquent-sluggable.

因此,发生此错误的最常用包之一是cviebrock/eloquent-sluggable.

https://github.com/cviebrock/eloquent-sluggable/issues/214.

https://github.com/cviebrock/eloquent-sluggable/issues/214

There is nothing you can but wait for the pull requests to get accepted or just edit the vendor files which is not that cool option to do.

您只能等待拉取请求被接受,或者只是编辑供应商文件,这不是一个很酷的选择。

回答by Oguzhan

Try

尝试

php artisan optimize --force

If error continues delete vendor/compiled.php and then run the command above This will recreate vendor/compiled.php class.

如果错误继续删除 vendor/compiled.php 然后运行上面的命令 这将重新创建 vendor/compiled.php 类。

Command above deletes two files

上面的命令删除两个文件

The bootstrap/compiled.php file. This file is created when you optimize classes. The app/storage/meta/services.json file. This file is created as Laravel tries to optimize the loading of the service providers your application uses.

bootstrap/compiled.php 文件。该文件是在您优化类时创建的。app/storage/meta/services.json 文件。这个文件是在 Laravel 尝试优化应用程序使用的服务提供者的加载时创建的。

Source

来源

when I ran clear-compiled it deleted the vendor/compiled.php in my project.

当我运行 clear-compiled 时,它删除了我项目中的 vendor/compiled.php。

Since You do not have no compiled class at all you may not delete it. This must be why you are having problems. Do not bother clearing compiled classes..

由于您根本没有任何已编译的类,因此您可能无法删除它。这一定是您遇到问题的原因。不要费心清除编译的类..

I am also upgrading a huge app from 4.2 to 5.0. problems problems.. :)

我还将一个巨大的应用程序从 4.2 升级到 5.0。问题问题.. :)

回答by Curos

The bug is being identified and discussed here :

该错误正在此处被识别和讨论:

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

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

回答by LostDreamer_nl

It's probably the SocialiteServiceProvider, maybe others as well.

它可能是 SocialiteServiceProvider,也可能是其他。

I had this problem last night when upgrading, a lot of serviceproviders have to upgrade their code to 5.2 as well.

我昨晚升级时遇到了这个问题,很多服务提供商也不得不将他们的代码升级到5.2。

AdamWathan\EloquentOAuthL5\Installation seems to use the Composer class directly, remove this service provider and you can continue the upgrade.

AdamWathan\EloquentOAuthL5\Installation 好像直接使用了 Composer 类,去掉这个服务提供者就可以继续升级了。

回答by Justin

Try this:

尝试这个:

composer update --no-scripts

composer update --no-scripts

It allowed me to see a detailed explanation of why composer updatefailed. For me I was updating to laravel 5.2 but forgot to also update "laravelcollective/html": "5.1.*"to "laravelcollective/html": "5.2.*".

它让我看到了composer update失败原因的详细解释。对我来说,我正在更新到 laravel 5.2 但忘记也更新"laravelcollective/html": "5.1.*""laravelcollective/html": "5.2.*".

Found here https://stackoverflow.com/a/36515184/922522

在这里找到https://stackoverflow.com/a/36515184/922522