为什么在安装作曲家之后未在“ bin”中找到或重新创建bin / console脚本?

时间:2019-11-08 17:27:04

标签: php symfony composer-php symfony-4.3 symfony-flex

我更改了composer.json并突然改变了

rm -rf vendor/* && rm -rf bin/* && composer update

由于在文件夹console中找不到Symfony bin,所以在过程结束时出现错误消息。当我从另一个项目中手动将其复制到那里时,它可以工作,但是那不是解决方案。

错误消息如下:

 ....
  - 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.json文件并运行composer install,那么一切正常,并且console脚本位于bin文件夹中,应该在哪里。

有什么区别?

稍后我自动运行它以进行自动部署时,如何确定控制台在那里?

1 个答案:

答案 0 :(得分:2)

首先,您不应该删除bin/console脚本。这是您应用程序的一部分,等效于public/index.php,但作为控制台入口点。

该文件很可能应保存在您的源代码存储库中。

因此,确保文件在部署时会在那里的最佳方法是:不要删除它,它是源代码的一部分,应该保留。


该文件是在install期间在一个空文件夹上创建的,这是因为由于以下两个原因在install期间执行了弹性配方:

  • Flex配方仅在安装过程中执行,而不在更新过程中执行。
  • The flex recipe for symfony/console将复制整个bin目录以重新创建它,但不会覆盖现有目录。 (因此,如果您按应将此目录及其内容保留在存储库中,则在生产环境中部署项目时不会覆盖它。)