问题描述
首先:我对ansible非常陌生-我昨天才刚开始。大多数事情都运作良好(安装软件包,克隆我的git repo等),但是我无法运行composer install
来拯救我。
这是设置:
- L@R_404_6460@vel 8.x项目。
- 开发环境在无家可归的情况下运行(Ubuntu 20.04)
- 可用版本2.9.6
- Remote是一个Ubuntu 20.04 EC2实例。
- 项目根目录为
/var/www/roster
我已将远程vendor
目录临时设置为0777
,所有者已设置为ubuntu
(EC2默认ssh用户),但将其重置为0755
和{{ 1}}完成后。
我尝试了几种变体,但是当我使用root
运行剧本时,它会挂起。这是我尝试过的事情:
ansible-playbook -i ./hosts composer_install.yml
...并且:
tasks:
- name: Composer install
shell: composer install
args:
chdir: /var/www/roster
...和(安装了ansible-composer插件):
tasks:
- name: Composer install
composer: command=install working_dir=/var/www/roster optimize_autoloader=no
我确定这是可以做到的,但是如何做?
解决方法
问题出在 root 用户中,当您运行时
sudo php /usr/local/bin/composer --working-dir=/path/to/project install
作曲家问你
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]?
因为这个任务上的 ansible 堆栈。
您必须使用下一个构造来修复它
- name: "Composer install"
become: yes
become_user: not_root_user
composer:
command: install
global_command: false
working_dir: /path/to/project
,
正如 by Vlad Gor in his answer 所正确指出的那样,很可能是您将命令作为 root
(或使用 sudo
)运行。
如果你不能/不想切换用户,这可以通过使用参数 --no-interaction
或者更简单一点的 ansible 相应的环境变量 COMPOSER_NO_INTERACTION: "1"
来规避
例如:
tasks:
- name: Composer install
composer:
command: install
working_dir: /var/www/roster
environment:
COMPOSER_NO_INTERACTION: "1"
,
好的,这不是一个真正的“答案”,但是我能够通过ansible成功运行composer install
。就我而言,问题在于最新版本的作曲家。我当时使用的是2.0.4,回滚到1.10.17时,一切都很好。