【问题标题】:Ansible "Permission denied" when trying to install/check a gem尝试安装/检查gem时Ansible“权限被拒绝”
【发布时间】:2014-03-04 14:15:35
【问题描述】:

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

【问题讨论】:

  • 你找到解决办法了吗?

标签: ruby ubuntu rbenv ansible


【解决方案1】:

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

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

- hosts: myhosts
  user: someuser
  sudo: True
  sudo_user: another_user

【讨论】:

    【解决方案2】:

    据我所知,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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2016-02-21
      • 2020-05-01
      • 2011-05-23
      相关资源
      最近更新 更多