2013-08-22 67 views
0

我正在嘗試使用Puppet在各種系統上設置RVM。一切工作正常,直到我嘗試指定使用哪個Ruby。如何在木偶上使用'rvm use'?

使用Puppet exec運行rvm use 1.9.3會產生錯誤,因爲'rvm不是函數',因爲Puppet的exec會強制所有命令都是完全限定的。

我將如何使用Puppet通過RVM設置系統Ruby?這甚至有可能嗎?

回答

3

當您安裝rvm時,您需要source rvm.sh才能立即開始工作。該文件的確切路徑通常在安裝消息中公開。

2

您正在收到很好的錯誤消息,它告訴您RVM不能交互使用。這意味着即使RVM忽略了問題並設置了當前的ruby,它也沒有任何意義,因爲將RVM作爲二進制運行是單獨執行的shell,無法設置父進程(shell/puppet)環境。爲了能夠設置環境,RVM必須作爲shell的函數加載,以便它可以改變當前進程的環境。

因此,有幾種方法,使其工作:

  1. 子shell有多個命令:

    bash -c "source ~/.rvm/scripts/rvm ; rvm ..." 
    
  2. RVM設置操作:

    ~/.rvm/bin/rvm {ruby-name} do {command}... 
    
  3. 一些操作不需要以上技巧(如設置默認的紅寶石):

    ~/.rvm/bin/rvm alias create default {ruby-name} 
    

一個額外的解釋 - 默認紅寶石是不是系統的紅寶石,它是,如果你的目標是爲紅寶石的可用性在多個地方使用別名和包裝,將加載當您源RVM,紅寶石:

rvm alias create {my_app} {ruby-version} 
rvm wrapp {ruby-version} --no-links --all 
PATH=~/.rvm/environments/{my_app}:$PATH 

這將創建:

  1. 一個別名 - 所以很容易參考應用紅寶石,並且需要在腳本中沒有變化而改變紅寶石 - 只需更新阿里爲
  2. 創建安裝在紅寶石所有寶石包裝 - 包括rubygem命令
  3. 上應與紅寶石爲您的應用程序中工作的任何腳本的頂部添加PATH=...包裝。