Ошибки развертывания Laravel Forge из обновления Composer

Мое приложение отлично работает локально и работает на Digital Ocean. Но я получаю следующие две альтернативные ошибки развертывания в Laravel Forge.

Если я бегу:

composer update --no-dev
php artisan optimize

тогда я получаю следующую ошибку в Forge:

[RuntimeException]
The lock file does not contain require-dev information, run install with the --no-dev option or run update to install those packages.

Если я бегу:

composer update
php artisan optimize

тогда я получаю это на Forge:

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files
PHP Fatal error:  Call to undefined method
Illuminate\Foundation\Application::getCachedCompilePath() in /home/forge/default/vendor/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php on line 28
PHP Stack trace:
PHP   1. {main}() /home/forge/default/artisan:0
PHP   2. Illuminate\Foundation\Console\Kernel->handle() /home/forge/default/artisan:36
PHP   3. Symfony\Component\Console\Application->run() /home/forge/default/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:94
PHP   4. Symfony\Component\Console\Application->doRun() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:126
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:195
PHP   6. Illuminate\Console\Command->run() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:874
PHP   7. Symfony\Component\Console\Command\Command->run() /home/forge/default/vendor/laravel/framework/src/Illuminate/Console/Command.php:101
PHP   8. Illuminate\Console\Command->execute() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:257
PHP   9. Illuminate\Container\Container->call() /home/forge/default/vendor/laravel/framework/src/Illuminate/Console/Command.php:115
PHP  10. call_user_func_array:{/home/forge/default/storage/framework/compiled.php:925}() /home/forge/default/storage/framework/compiled.php:925
PHP  11. Illuminate\Foundation\Console\ClearCompiledCommand->fire() /home/forge/default/storage/framework/compiled.php:925

[Symfony\Component\Debug\Exception\FatalErrorException]                             
Call to undefined method Illuminate\Foundation\Application::getCachedCompilePath()
Script php artisan clear-compiled handling the post-install-cmd event returned with an error

[RuntimeException
Error Output: PHP Fatal error:  Call to undefined method Illuminate\Foundation\Application::getCachedCompilePath() in /home/forge/default/vendor/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php on line 28  
PHP Stack trace:                                                                                                                                                                                                                          
PHP   1. {main}() /home/forge/default/artisan:0                                                                                                                                                                                           
PHP   2. Illuminate\Foundation\Console\Kernel->handle() /home/forge/default/artisan:36                                                                                                                                                    
PHP   3. Symfony\Component\Console\Application->run() /home/forge/default/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:94                                                                                        
PHP   4. Symfony\Component\Console\Application->doRun() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:126                                                                                          
PHP   5. Symfony\Component\Console\Application->doRunCommand() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:195                                                                                   
PHP   6. Illuminate\Console\Command->run() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:874                                                                                                       
PHP   7. Symfony\Component\Console\Command\Command->run() /home/forge/default/vendor/laravel/framework/src/Illuminate/Console/Command.php:101                                                                                             
PHP   8. Illuminate\Console\Command->execute() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:257                                                                                               
PHP   9. Illuminate\Container\Container->call() /home/forge/default/vendor/laravel/framework/src/Illuminate/Console/Command.php:115                                                                                                       
PHP  10. call_user_func_array:{/home/forge/default/storage/framework/compiled.php:925}() /home/forge/default/storage/framework/compiled.php:925                                                                                           
PHP  11. Illuminate\Foundation\Console\ClearCompiledCommand->fire() /home/forge/default/storage/framework/compiled.php:925

Что я делаю неправильно?

1 ответ

Решение

Вероятно, самое простое, что можно сделать здесь, это.

  1. в вашей локальной среде разработки дважды проверьте файл composer.json на наличие каких-либо элементов в разделе "require", которые должны быть в разделе "require-dev", и переместите их, если это необходимо
  2. Удалите свой локальный файл composer.lock
  3. Запустите установку композитора composer update -vvv
  4. Протестируйте ваше приложение локально
  5. Убедившись, что все работает в соответствии с вашими ожиданиями, верните файл composer.lock обратно в систему контроля версий и повторно разверните приложение в Forge.

Если вы продолжаете получать ошибки при развертывании, и на сервере больше ничего не стоит, я бы уничтожил ваш старый экземпляр сервера, а затем создал новый сервер в Forge. Пусть он запустит сборку с новым файлом composer.lock, и я уверен, что он поможет вам решить эту проблему.:-D

На другой ноте, которая может помочь, как правило, о развертывании я буду одобрять composer install над composer update на основании этого я проверил функциональность на основе конкретных версий зависимостей, которые записаны в файле composer.lock. Следование этому подходу означает, что поведение приложения должно быть более предсказуемым. Вы рискуете допустить непредсказуемое поведение, когда вы или одна из ваших зависимостей полагаетесь на библиотеку, которая всегда является самой последней версией (например, dev-master), поскольку код может изменяться очень часто.

Другие вопросы по тегам