我正在尝试使用Puppet在各种系统上设置RVM。一切正常,直到我尝试指定使用哪个Ruby。
使用Puppet exec运行rvm use 1.9.3
会产生错误,因为'rvm不是函数',因为Puppet的exec强制所有命令都是完全限定的。
我如何使用Puppet通过RVM设置系统Ruby?这甚至可能吗?
答案 0 :(得分:3)
当您安装rvm
时,您需要source rvm.sh
才能让它立即正常运行。此文件的确切路径通常在安装消息中公开。
答案 1 :(得分:2)
您收到了很好的错误消息,它告诉您RVM不能以交互方式使用。这意味着即使RVM忽略了问题并设置了当前的ruby也没有任何意义,因为将RVM作为二进制运行是shell的单独执行,它将无法设置父进程(shell / puppet)环境。为了能够设置环境,RVM必须作为shell中的函数加载,以便它可以改变当前进程的环境。
所以几乎没有办法让它发挥作用:
使用多个命令的子shell:
bash -c "source ~/.rvm/scripts/rvm ; rvm ..."
RVM设置操作:
~/.rvm/bin/rvm {ruby-name} do {command}...
某些操作不需要上面的技巧(比如设置默认的ruby):
~/.rvm/bin/rvm alias create default {ruby-name}
一个额外的解释 - 默认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
这将创建:
ruby
和gem
命令的包装器PATH=...
添加到应用于应用程序的ruby的任何脚本之上。