2013-02-01 70 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