2015-01-01 5 views
1

VM을 설정할 때, 일부 npm 명령과 함께 DB 마이그레이션을 실행할 수 있습니다.Ansible이 npm 또는 rake 명령을 실행할 수 없음

- 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 

레이크의 오류가 말한다 : 여기에 코드가

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를 추가하려했지만 그 중 하나가 작동하지 않았다.

VM에 ssh 할 때 아무런 문제없이 이러한 명령을 실행할 수있었습니다.

도움을 주시면 대단히 감사하겠습니다.

+0

@JacobBudin 예, 노드와 npm을 설치하는 또 다른 플레이 북 역할이 있습니다. 앞서 언급했듯이 VM 자체에서 성공적으로 명령을 실행할 수있었습니다. –

+0

당신은 npm과 rake 명령을 실행할 수있는 전체 경로를 줄 수 있습니까? – BMW

답변

4

손으로 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을 사용하는 것이 좋습니다. 또한 암시 된 sudo: no을 삭제할 수 있습니다.

다음은 개선 된 예입니다.

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

짐작하기 : shell 모듈 대신 command 안전 모듈을 사용하고 있으므로 실행 파일의 경로가 $PATH에 없습니다. 문서에 따르면

:

shell 모듈은 공백으로 구분 된 인수 목록 다음에 명령 이름을 사용합니다. 이것은 정확히 command 모듈과 비슷하지만 원격 노드의 쉘 (/bin/sh)을 통해 명령을 실행합니다. ansible.command 사람 페이지에서

: 이와 같이

, 명령에 대한 모든 경로가 완전해야합니다.

그래서 완전한 경로를 명령을 교체 (또는 이미 chdir을 가지고보고, ./로 접두사를 시도) 또는 (가에있는 경우 사용자의 $PATH) 대신 shell를 사용합니다.

+0

'''rake db : migrate''' 명령을 보면 이미'''shell''을 사용하고 있지만 여전히 작동하지 않습니다. –

+0

@ KoesBong'npm'이 (가) 기본 질문입니다. 맞습니까? 이것들은 2 개의 별개의 쟁점입니다. –

+0

둘 다 내 문의 사항입니다. 나는 npm과 같은 문제에 대해서'''shell'''을 사용해 보았습니다. –

관련 문제