我更改了我的composer.json,当我进行时
rm -rf vendor/* && rm -rf bin/* && composer update
我在过程结束时收到错误消息,因为在文件夹bin
中找不到Symfonyconsole
。当我从另一个项目手动复制到那里时,它可以工作,但这不可能是解决方案。
错误消息如下:
....
- Installing symfony/test-pack (v1.0.6): Loading from cache
- Installing symfony/web-server-bundle (v4.3.6): Loading from cache
Generating autoload files
ocramius/package-versions: Generating version class...
ocramius/package-versions: ...done generating version class
Executing script cache:clear [KO]
[KO]
Script cache:clear returned with error code 1
!! Could not open input file: ./bin/console
!!
Script @auto-scripts was called via post-update-cmd
错误很明显,因为bin文件夹确实包含指向其他脚本加载的符号链接,但不包含控制台脚本本身。
我试着清除composer缓存,但没有什么区别。
如果我创建了一个完整的新空文件夹,并将composer.json
文件复制到那里并运行composer install
,那么一切都很好,console
脚本就在bin
文件夹中,它应该在那里。
有什么区别?
当我稍后自动运行它进行自动部署时,我怎么能确定控制台会在那里?
首先,您不应该删除bin/console
脚本。这是应用程序的一部分,它相当于public/index.php
,但作为控制台入口点。
最有可能的是,该文件应该保存在源代码存储库中。
因此,确保该文件在部署时存在的最佳方法是:不要删除它,它是源代码的一部分,应该保留。
该文件是在install
期间在一个空文件夹上创建的,因为在install
期间由于两件事执行了flex配方:
- Flex配方仅在安装期间执行,而不是在更新期间执行
- symfony/console的flex配方将复制整个
bin
目录以重新创建它,但它不会覆盖现有目录。(因此,如果您将此目录及其内容保留在您的repo中,那么当您在生产上部署项目时,它不会被覆盖(