Reputation: 460
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
php artisan clear-compiled
is run. Here is the error.
Class Illuminate\Foundation\Composer does not exist
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.
Below are my Service Providers and my composer.json file.
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
{
"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/
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
This is how the autoload.php file looks like:
<?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.
Upvotes: 14
Views: 5940
Reputation: 27331
Try this:
composer update --no-scripts
It allowed me to see a detailed explanation of why composer update
failed. For me I was updating to laravel 5.2 but forgot to also update "laravelcollective/html": "5.1.*"
to "laravelcollective/html": "5.2.*"
.
Found here https://stackoverflow.com/a/36515184/922522
Upvotes: 1
Reputation: 5332
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.
From the upgrade notes:
The
Illuminate\Foundation\Support\Composer
class has been moved toIlluminate\Support\Composer
.
Wait for the pull requests to get accepted, for instance the laracasts/generators
package, which is included within your composer.json
file, is one of the packages that is not yet compatible with Laravel 5.2
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
.
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.
Upvotes: 3
Reputation: 460
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.
Upvotes: 0
Reputation: 11
It's probably the SocialiteServiceProvider, maybe others as well.
I had this problem last night when upgrading, a lot of serviceproviders have to upgrade their code to 5.2 as well.
AdamWathan\EloquentOAuthL5\Installation seems to use the Composer class directly, remove this service provider and you can continue the upgrade.
Upvotes: 1
Reputation: 999
The bug is being identified and discussed here :
https://github.com/laravel/framework/issues/9678
Upvotes: 1
Reputation: 734
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.
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.
when I ran clear-compiled it deleted the vendor/compiled.php in my project.
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.. :)
Upvotes: 2