Почему сценарий bin / console не найден и не воссоздан в «bin» после установки композитора? - PullRequest
1 голос
/ 08 ноября 2019

Я изменил свой composer.json и внезапно, когда я

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

, я получаю сообщения об ошибках в конце процесса, потому что Symfony console не найден в папке 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 Ответ

1 голос
/ 08 ноября 2019

Во-первых, вы не должны удалять ваш bin/console скрипт. Это часть вашего приложения, она эквивалентна public/index.php, но является точкой входа в консоль.

Скорее всего, этот файл должен храниться в вашем хранилище исходного кода.

Так что лучший способгарантия того, что файл будет там при развертывании, будет: не удаляйте его, он является частью вашего исходного кода и должен храниться.


Файл создается во время install в пустой папке, потому чторецепт flex выполняется во время install по двум причинам:

  • рецепты flex выполняются только во время установки, а не во время обновления.
  • рецепт flex для symfony /console скопирует весь каталог bin, чтобы создать его заново, но не будет перезаписывать существующий каталог. (Следовательно, если вы сохраните этот каталог и его содержимое в репозитории, как вы должны, он не будет перезаписан при развертывании проекта в рабочей среде).
...