2017-01-26 20 views
0

나는 Aniable을 사용하여 Elixir 프로그래밍 언어 버전 관리자를 설치하려고합니다. 퍼시스턴트로 PATH에 바이너리 추가하기

내가이에 사용하는 재생됩니다

- name: Kiex Installation 
    hosts: web 
    gather_facts: false 
    remote_user: deployer 
    tasks: 
    - shell: \curl -sSL https://raw.githubusercontent.com/taylor/kiex/master/install | bash -s 
    - name: Add Kiex Bin to Path 
     lineinfile: 
     dest: /home/deployer/.bashrc 
     regexp: '^test -s' 
     line: '[[ -s "$HOME/.kiex/scripts/kiex" ]] && source "$HOME/.kiex/scripts/kiex"' 
    - name: Reload Path 
     shell: source /home/deployer/.bashrc 
     args: 
     executable: /bin/bash 
    - shell: echo $PATH 
     register: pathul 
    - debug: 
     var: pathul 

- name: Elixir Installation 
    hosts: web 
    gather_facts: false 
    remote_user: deployer 
    tasks: 
    - shell: echo $PATH 
     register: pathul 
    - debug: 
     var: pathul 
    - name: Install Elixir Version 
     command: /home/deployer/.kiex/bin/kiex list 
     args: 
     executable: /bin/bash 
     chdir: /home/deployer/ 
    - name: Set Elixir Version as Default 
     shell: kiex default 1.4 

Kiex의 설치가 성공하고 난 원격 시스템에 로그인하면 내가 kiex 명령을 사용하여 간단하게 실행할 수입니다. 나는 바이너리를 "~/.kiex/scripts/kiex"에 소스했기 때문에 이것을 할 수있다. 나는 $PATH 변수를 에코 때 그것의 kiex 바이너리 경로 /home/deployer/.kiex/bin을 보여줍니다

$ echo $PATH 
/home/deployer/.kiex/bin:/home/deployer/.kiex/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 
그러나

kiex, kiex list 및 위의 비약 설치 재생에 /home/deoployer/.kiex/bin/kiex list는 메시지와 함께 실패도 :

TASK [Set Elixir Version as Default] ******************************************* 
fatal: [local-web-2]: FAILED! => {"changed": true, "cmd": "kiex default 1.4", "delta": "0:00:00.002042", "end": "2017-01-26 22:13:32.898082", "failed": true, "rc": 127, "start": "2017-01-26 22:13:32.896040", "stderr": "/bin/sh: 1: kiex: not found", "stdout": "", "stdout_lines": [], "warnings": []} 

또한 able을 통해 경로를 반향 한 결과를 등록한 변수 pathul/home/deployer/.kiex/bin :

0을 포함하지 않습니다.
"stdout": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" 

어떻게하면 kiex 명령이 Ansible을 통해 제대로 작동하게 할 수 있습니까? 당신은 오타가

답변

1

당신이 Install Elixir Version 작업에서 시도처럼 그냥, 전체, 절대 경로를 사용하지만, 마음은 모두 예제와 설명에 당신은 게시 :

command: /home/deoployer/.kiex/bin/kiex list 

[ ]에도 /home/deoployer/.kiex/bin/kiex list []를 실패 [S]

그것은 아마도 제 플레이 등 deployer,하지 deoployer이어야한다.

올바른 경로를 제공하면 "kiex : 찾을 수 없음"메시지와 함께 실패 할 수있는 이유가 없습니다. 다른 작업에 대한


설명 :

  • man bash을 인용 :

    로그인 쉘이 아닌 대화 형 쉘이 시작

    , 배쉬는 경우, 읽고 ~/.bashrc에서 명령을 실행 그 파일이 존재합니다.

    따라서 대화식 세션이 아니기 때문에 ~/.bashrc은 (는) 당신이 작업을 Anabled로 실행할 때 읽지 않습니다.

    예를 들어 pathul 변수에 ~/.bashrc에 적용된 변경 사항이없는 이유가 여기에 해당됩니다.

  • 다음 두 태스크는 별도의 bash 프로세스를 실행합니다.

    - name: Reload Path 
        shell: source /home/deployer/.bashrc 
        args: 
        executable: /bin/bash 
    - shell: echo $PATH 
        register: pathul 
    
+0

내 작전에 전개 있었나요 : 첫 번째 작업에 공급 환경은 두 번째의 환경에 영향을주지 않습니다. 오타가 stackoverflow 샘플에 있습니다. ~/.bashrc가 읽히지 않는 것에 관해서는, 나는 그것에 대해 뭔가 잘못되었다고 의심했다. 어디에서'[[-s "$ HOME/.kiex/scripts/kiex"]] && 소스 "$ HOME/.kiex/scripts/kiex" ''를 넣어야합니까? –

+0

잘 모르겠습니다. 그것은 OS와 배포에 따라 다릅니다. 그리고 전체 경로를 사용하는 것이 좋습니다. – techraf

+0

나는'~/.profile'을 시도했지만 여전히 운이 없다. –