我的应用程序在本地运行良好,并且在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
IlluminateFoundationApplication::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. IlluminateFoundationConsoleKernel->handle() /home/forge/default/artisan:36
PHP 3. SymfonyComponentConsoleApplication->run() /home/forge/default/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:94
PHP 4. SymfonyComponentConsoleApplication->doRun() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:126
PHP 5. SymfonyComponentConsoleApplication->doRunCommand() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:195
PHP 6. IlluminateConsoleCommand->run() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:874
PHP 7. SymfonyComponentConsoleCommandCommand->run() /home/forge/default/vendor/laravel/framework/src/Illuminate/Console/Command.php:101
PHP 8. IlluminateConsoleCommand->execute() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:257
PHP 9. IlluminateContainerContainer->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. IlluminateFoundationConsoleClearCompiledCommand->fire() /home/forge/default/storage/framework/compiled.php:925
[SymfonyComponentDebugExceptionFatalErrorException]
Call to undefined method IlluminateFoundationApplication::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 IlluminateFoundationApplication::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. IlluminateFoundationConsoleKernel->handle() /home/forge/default/artisan:36
PHP 3. SymfonyComponentConsoleApplication->run() /home/forge/default/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:94
PHP 4. SymfonyComponentConsoleApplication->doRun() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:126
PHP 5. SymfonyComponentConsoleApplication->doRunCommand() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:195
PHP 6. IlluminateConsoleCommand->run() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Application.php:874
PHP 7. SymfonyComponentConsoleCommandCommand->run() /home/forge/default/vendor/laravel/framework/src/Illuminate/Console/Command.php:101
PHP 8. IlluminateConsoleCommand->execute() /home/forge/default/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:257
PHP 9. IlluminateContainerContainer->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. IlluminateFoundationConsoleClearCompiledCommand->fire() /home/forge/default/storage/framework/compiled.php:925
我做错了什么?
这里可能最简单的事情就是这样。
- 在本地开发环境中,仔细检查composer.json文件中的"require"部分中的任何项目,这些项目应该在"require-dev"部分中,并在需要时移动它们
- 删除本地composer.lock文件
- 运行composer安装
composer update -vvv
- 在本地测试您的应用程序
- 当您确信一切都符合您的期望时,将composer.lock文件提交回版本控制系统,并在Forge上重新部署应用程序
如果你在部署时继续出现错误,而服务器上没有其他价值,我会销毁你的旧服务器实例,然后在Forge上创建一个新服务器。让它用新的composer.lock文件运行构建,我相信它会让你克服这个问题。:-D
另一个可能有所帮助的注意事项是,通常在部署时,我更喜欢composer install
而不是composer update
,因为我将根据composer.lock文件中记录的特定版本的依赖项测试功能。遵循这种方法意味着应用程序行为应该更加可预测。如果您或您的某个依赖项依赖于始终是最新版本的库(例如dev-master),则可能会出现不可预测的行为,因为代码可能会频繁更改。