在尝试安装/检查gem时,Ansible“权限被拒绝”

时间:2013-12-27 19:25:40

标签: ruby ubuntu rbenv ansible

我最近决定将我的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。我有同样的错误。 :(

2 个答案:

答案 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