1

我有什么:厨师

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

4

2 回答 2

1

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

于 2013-02-02T21:49:27.340 回答
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
于 2013-02-01T12:46:33.120 回答