2

我最近决定将我的 Ansible 部署切换为通过 rbenv 安装 Ruby,而不是通过 ruby​​1.9.1 从 apt-get 安装。现在我在尝试通过 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 安装 ruby​​1.9.1 时它工作正常。有任何想法吗?

顺便说一下,这被部署到Ubuntu 13.04服务器上。

更多信息:

显然它不仅仅是在 s3cp 上绊倒。我跳过了那个并继续执行另一个命令来安装捆绑程序。该命令也不起作用(以同样的方式失败)。我想知道是否存在与 rbenv ruby​​ 冲突的默认 ruby​​(但是,which ruby当 ssh'ed in 产生预期的 rbenv 目录时)。

更多信息:

我尝试通过 rvm 安装 ruby​​。我有同样的错误。:(

4

2 回答 2

1

当你使用 -vvvv 运行 ansible 时会发生什么?它应该提供任务的完整详细输出,希望包括它遇到的任何错误。运气好的话,它会告诉你问题是什么。

要检查的另一件事是您以哪个用户身份运行任务。您如何在游戏的顶部设置以下参数(或者您没有指定任何这些参数)?

- hosts: myhosts
  user: someuser
  sudo: True
  sudo_user: another_user
于 2014-01-16T18:22:50.507 回答
1

据我所知,gemansible 模块不支持 rbenv。这意味着当您调用gem模块时,它将尝试在系统范围内安装 gem。当然,如果您不在节点上以 root 身份运行,这将失败。

要使用 rbenv 安装 gem,您必须使用 rbenv 的 gem shim。做到这一点的唯一方法是能够rbenv init通过 bash 发送命令来触发:

- name: Install Bundler
  command: bash -lc "gem install bundler"

这已经在这里解决了: 使用 Ansible 安装 Bundler gem

于 2014-03-04T06:15:35.733 回答