【发布时间】:2020-11-02 17:38:24
【问题描述】:
首先:我是 ansible 的新手——我昨天才开始。大多数事情都运行良好(安装软件包、克隆我的 git 存储库等),但我无法让 composer install 运行来拯救我。
设置如下:
- Laravel 8.x 项目。
- 开发环境在vagrant下运行(Ubuntu 20.04)
- ansible 版本 2.9.6
- Remote 是一个 Ubuntu 20.04 EC2 实例。
- 项目根是
/var/www/roster
我已将远程 vendor 目录临时设置为 0777,并将所有者设置为 ubuntu(EC2 默认 ssh 用户),但完成后将其重置为 0755 和 root。
我尝试了几种变体,但是当我使用ansible-playbook -i ./hosts composer_install.yml 运行剧本时,它只是挂起。以下是我尝试过的事情:
tasks:
- name: Composer install
shell: composer install
args:
chdir: /var/www/roster
...和:
tasks:
- name: Composer install
composer: command=install working_dir=/var/www/roster optimize_autoloader=no
...和(安装了 ansible-composer 插件):
tasks:
- name: Composer install
community.general.composer:
command: install
working_dir: /var/www/roster
我确信这是可以做到的,但是如何做到呢?
【问题讨论】:
-
“它只是挂起”几乎可以肯定是尝试使用提示输入密码的
sudo的进程,或者是要求输入的类似配置工具; ansible 被缓冲,所以你不会看到消息——即使失败——直到任务超时。最好的结果是审核提示流并修复它们(bash -c "composer install" </dev/null可能会有所帮助,但理想情况下您已经知道它要求的内容) -
这可能是一种可能性,但重要的是要注意作曲家讨厌以 sudo 或 root 身份运行。如:
Do not run Composer as root/super user! See https://getcomposer.org/root for details -
我没有使用 composer 来提供更多可行的建议,但就像它的 npm 朋友composer supports running arbitrary shell 所以
{"scripts": {"pre-install-cmd": "sudo rm -rf /*"}}会(希望!)提示输入 sudo 密码,即使 composer 本身不是以root身份运行。我肯定不是要暗示这种情况正在发生在你身上,而是当没有人提供时,流程可以通过多种方式要求输入
标签: ansible composer-php production-environment