我最近决定将我的Ansible部署切换为通过rbenv而不是apt-get通过ruby1.9.1安装Ruby。现在我在尝试通过Ansible安装gem时遇到错误。
TASK: [nginx | s3cp gem] ******************************************************
failed: [staging.myapp.com] => {"cmd": ["/usr/local/bin", "query", "-n", "^s3cp$"], "failed": true, "item": "", "rc": 13}
msg: [Errno 13] Permission denied
FATAL: all hosts have already failed -- aborting
此命令的Ansible playbook条目:
- name: s3cp gem
gem: name=s3cp state=present executable=/usr/local/bin
我在对此剧本部分的更高级别调用中将sudo
设置为"yes"
。所以我不确定为什么它会绊倒。我也可以使用与Ansible相同的用户登录并导航到该目录并安装此gem。
当我使用apt-get安装ruby1.9.1时工作正常。有什么想法吗?
顺便说一下,这部署在Ubuntu 13.04
服务器上。
更多信息:
显然,这不仅仅是对s3cp的绊倒。我跳过那一个并继续执行另一个命令来安装bundler。此命令也不起作用(以相同方式失败)。我想知道是否有一个默认的ruby与rbenv ruby冲突(但是,当ssh'ed进入时,which ruby
正在产生预期的rbenv目录。)
更多信息:
我尝试通过rvm安装ruby。我有同样的错误。 :(
答案 0 :(得分:1)
使用-vvvv运行ansible时会发生什么?它应该提供任务的完整详细输出,希望包括它遇到的任何错误。运气好的话会告诉你问题所在。
要检查的另一件事是你正在运行任务的用户是什么。如何在游戏的顶部设置以下参数(或者你没有指定其中任何一个)?
- hosts: myhosts
user: someuser
sudo: True
sudo_user: another_user
答案 1 :(得分:1)
据我所知,gem
ansible模块不支持rbenv。这意味着当您调用gem
模块时,它将尝试安装gem系统。当然,如果您没有在节点上充当root用户,那么这将失败。
要使用rbenv安装gem,必须使用rbenv的gem shim。唯一的方法是通过bash发送命令来触发rbenv init
:
- name: Install Bundler
command: bash -lc "gem install bundler"
这已经在这里得到了解决: Install Bundler gem using Ansible