Мне нужно автоматизировать настройку проекта laravel / обновление на моем производственном компьютере из системы управления версиями.

Я написал сценарий bash, чтобы клонировать источник из репозитория GIT и запустить установку.

Код git идет в папку /var/www/prod/mainapp/, поэтому следующий код bash выполняется после команды git:

cd /var/www/prod/mainapp/app/
composer install # composer update will not work as well
php artisan dump-autoload
php artisan optimize

Когда код достигает: php artisan optimize, я получаю следующую ошибку.

PHP Fatal error: Class 'App\Providers\SocialUserProvider' not found in /var/www/prod/mainapp/app/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 146

В моем app.php у меня есть следующие поставщики:

    App\Providers\FacebookGraphProvider::class,
    Torann\GeoIP\GeoIPServiceProvider::class,
    App\Providers\SocialUserProvider::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.*",
        "torann/geoip": "0.2.3"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~4.0",
        "symfony/css-selector": "2.8.*|3.0.*",
        "symfony/dom-crawler": "2.8.*|3.0.*"
    },
    "autoload": {
        "classmap": [
            "database",
            "app/Facades",
             "app/Services"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "classmap": [
            "tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-root-package-install": [
            "php -r \"copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ],
        "post-install-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postInstall",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postUpdate",
            "php artisan optimize"
        ]
    },
    "config": {
        "preferred-install": "dist"
    }
}
0
SexyMF 9 Ноя 2016 в 23:08

2 ответа

Лучший ответ

Вам нужно добавить в карту классов строку, которая сообщит, кто должен быть загружен автоматически. app/Providers

"classmap": [
        "database",
        "app/Facades",
         "app/Services",
         "app/Providers" //this is the missing part.
    ]
1
Avi Fatal 10 Ноя 2016 в 08:50

Я сталкивался с этим несколько раз.

Мое обходное решение - запустить

composer install --no-scripts

Вы получаете эту ошибку из-за сценариев предварительной установки в вашем файле composer.json и, добавляя этот флаг в процесс установки, вы пропускаете эти сценарии.

После того, как вы все установили, вы можете просто использовать composer install и composer update, как обычно.

0
James 9 Ноя 2016 в 21:28