2013-02-01 104 views
1

我有什麼:廚師;死簡單廚師rvm安裝腳本失敗

我需要的是:RVM安裝爲node[:deploy][:user][:name]。我需要用戶範圍的安裝,而不是系統範圍的安裝。

我試過最新:

script 'install_rvm' do 
    user = node[:deploy][:user][:name] 
    interpreter '/bin/bash' 
    code "su -l #{user} -c '\curl https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash -s stable'" 
    not_if { ::File.exists? "/home/#{user}/.rvm" } 
end 

當我手動測試服務器上運行su -l <username> -c '\curl <long_url> | bash -s stable'肯定它完美的作品。 我希望廚師運行相同的代碼,並在日誌中看起來像它,但下一個execute資源失敗,因爲實際上沒有/home/<username>/.rvm目前。 是的,我知道在廚師我可以指定用戶爲user node[:deploy][:user][:name]而不是更改用戶su但由於某種原因,如果我這樣做rvm會嘗試將自己安裝在/root/.rvm(env未正確重置?)。 嗯,我想問,爲什麼廚師對於這樣的死 - 簡單的任務如此極端蹩腳,但它看起來像我選擇了錯誤的地方,所以問題是我做錯了什麼,或者我錯過了什麼明顯的

+0

也許問題出在''su - ''命令。當我嘗試在''passenger-install-nginx-module''命令之前使用此命令時,我發現廚師bash腳本使用(不工作)和手動使用(正常工作)之間的差異相同。 – s2t2

+0

如果你用''user node [:deploy] [:user] [:name]''切換''user = node [:deploy] [:user] [:name]''會發生什麼情況,刪除等號? – s2t2

回答

0

那麼,至少這是有效的,如果所有更好的方式與廚師做到這一點失敗了,可能是有用的。下面是安裝紅寶石

execute 'install_rvm' do 
    user('root') 
    user = node[:deploy][:user][:name] 
    command "su -l #{user} -c '\curl https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash -s stable'" 
    not_if { ::File.exists? "/home/#{user}/.rvm" } 
end 

,獎金來創建gemset如果它是不存在的資源:

execute 'rvm_install_ruby' do 
    user('root') 
    user = node[:deploy][:user][:name] 
    ruby = node[:deploy][:ruby] 
    gemset = node[:deploy][:gemset] 
    command "su -l #{user} -c 'rvm use #{ruby}@#{gemset} --install --create'" 
    not_if do 
    if latest_patchlevel = `rvm list`.scan(/(ruby-#{ruby}-p)(\d+)/).map{ |a| a.last.to_i }.sort.last 
     `rvm list gemsets`.match /ruby-#{ruby}-p#{latest_patchlevel}@#{gemset}/ 
    end 
    end 
end 
1

爲什麼不使用來自Fletcher Nicholchef-rvm - 這是對付支持的方法主廚中的RVM

+0

儘管更廣泛使用的系統安裝工作正常,但無法爲每個用戶安裝。 – meandre