如何在木偶上使用'rvm use'?

时间:2013-08-22 17:58:20

标签: ruby unix rvm virtualization puppet

我正在尝试使用Puppet在各种系统上设置RVM。一切正常,直到我尝试指定使用哪个Ruby。

使用Puppet exec运行rvm use 1.9.3会产生错误,因为'rvm不是函数',因为Puppet的exec强制所有命令都是完全限定的。

我如何使用Puppet通过RVM设置系统Ruby?这甚至可能吗?

2 个答案:

答案 0 :(得分:3)

当您安装rvm时,您需要source rvm.sh才能让它立即正常运行。此文件的确切路径通常在安装消息中公开。

答案 1 :(得分: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. 某些操作不需要上面的技巧(比如设置默认的ruby):

    ~/.rvm/bin/rvm alias create default {ruby-name}
    
  4. 一个额外的解释 - 默认ruby不是系统ruby,它是一个ruby,当你获取RVM时会被加载,如果你的目标是在多个地方使用别名和包装器来获取ruby:

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

    这将创建:

    1. 别名 - 因此很容易引用应用程序ruby并且脚本中不需要更改来更改ruby - 只需更新别名
    2. 为该ruby中安装的所有gem创建包装器 - 包括rubygem命令的包装器
    3. PATH=...添加到应用于应用程序的ruby的任何脚本之上。