【问题标题】:Ansible unable to run npm or rake commandAnsible 无法运行 npm 或 rake 命令
【发布时间】:2018-09-07 01:36:49
【问题描述】:

在设置我的 VM 时,我想让 playbook 运行 DB 迁移以及一些 npm 命令。这是代码sn-p:

- name: Run DB Migration
   shell: rake db:migrate
   args:
     chdir: /opt/site
   sudo: no

- name: Install bower and grunt
  command: "npm install -g bower grunt-cli"
  args:
    chdir: /opt/site
  sudo: no

- name: Install bower packages
  command: "bower install"
  args:
    chdir: /opt/site
  sudo: no

- name: Install npm packages
  command: "npm install"
  args:
    chdir: /opt/site
  sudo: no

npm 东西的错误说:

TASK: [site | Install bower and grunt] ******************************
failed: [default] => {"cmd": "npm install -g bower grunt-cli", "failed": true, "item": "", "rc": 2}
msg: [Errno 2] No such file or directory

rake 的错误是:

TASK: [salemarked-api | Run DB Migration] *************************************
failed: [default] => {"changed": true, "cmd": " rake db:migrate ", "delta": "0:00:00.002664", "end": "2015-01-01 00:40:03.915189", "item": "", "rc": 127, "start": "2015-01-01 00:40:03.912525"}
stderr: /bin/bash: rake: command not found

我已经尝试将executable: /bin/bash 添加到 rake 命令中,但这也不起作用。

当我 ssh 进入虚拟机时,我能够毫无问题地运行这些命令。

非常感谢任何帮助。

【问题讨论】:

  • @JacobBudin 是的,我还有另一个安装节点和 npm 的剧本角色。如前所述,我能够在 VM 本身中成功运行这些命令。
  • 能否给出运行 npm 和 rake 命令的完整路径?

标签: ruby npm vagrant bower ansible


【解决方案1】:

手动运行which rake 并使用完整路径。粗略地说,您在运行时没有PATH 环境变量。这是一个例子,虽然我假设了一个特定的路径。

- name: Install bower and grunt
  command: "/usr/bin/npm install -g bower grunt-cli"
  args:
    chdir: /opt/site
  sudo: no

另外,shellcommand 的使用通常是一种反模式。在这种情况下,您最好使用npm module 替换两个command 调用。另请注意,您可以删除 sudo: no,这是隐含的。

这是一个改进的例子。

- name: install global node packages
  npm: name={{item}} path=/opt/site global=yes
  with_items:
    - bower
    - grunt-cli

【讨论】:

    【解决方案2】:

    危险猜测:可执行文件的路径不在您的 $PATH 中,因为您使用的是 command Ansible 模块而不是 shell 模块。

    根据文档:

    shell 模块采用命令名称后跟以空格分隔的参数列表。它几乎与 command 模块完全相同,但通过远程节点上的 shell (/bin/sh) 运行命令。

    ansible.command 手册页中:

    因此,所有命令路径都必须是完全限定的。

    所以用完全限定的路径替换命令(或尝试在它们前面加上./,因为你已经有了chdir),或者改用shell(如果它们在用户的$PATH中) .

    【讨论】:

    • 如果您查看rake db:migrate 命令,我已经使用了shell,但这仍然不起作用。
    • @KoesBong npm 是您的主要询问,对吗?这是两个不同的问题。
    • 两者都是我的询问。我刚刚尝试将 shell 用于 npm 和同样的问题。
    【解决方案3】:

    你可以这样做

    - name: Run my task
        shell: /bin/bash -l -c 'cd /your/path/here && RAILS_ENV={{api_rails_env}} bundle exec rake my_namespace:my_task'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-11
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      相关资源
      最近更新 更多