死简单厨师rvm安装脚本失败

时间:2013-02-01 12:31:25

标签: rvm chef

我有什么:厨师;

我需要:为node[:deploy][:user][:name]安装 RVM 。我需要用户范围的安装,而不是系统范围。

我最近尝试的内容:

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' 肯定时,它可以正常运行。 我希望Chef运行相同的代码,并且在日志中看起来像它一样,但下一个execute资源失败,因为实际上没有/home/<username>/.rvm存在。 是的我知道在Chef中我可以将用户指定为user node[:deploy][:user][:name],而不是使用su更改用户,但出于某种原因,如果我这样做rvm会尝试在/root/.rvm中安装自己(环境没有正确重置?)。 好吧,我想问一下,为什么即使是这么简单的任务,厨师也非常糟糕,但看起来我选择了错误的地方,所以问题是我做错了什么或者我错过了显而易见的事情

2 个答案:

答案 0 :(得分:1)

为什么不使用chef-rvm中的Fletcher Nichol - 这是在Chef中处理RVM的受支持方式。

答案 1 :(得分:0)

嗯,至少那个有用,如果所有更好的方法与Chef失败的话,可能会有用。这是安装ruby的资源

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