如何从ruby与RVM交互?

时间:2011-07-03 11:14:52

标签: ruby rvm system-calls

我正在尝试获取有关RVM中安装的ruby版本以及相关gemset和gem的信息。

我的第一个想法是使用对rvm list的系统调用来获取已安装的Rubies和每个Ruby的rvm use #{ruby_version} && rvm gemset list。但是有一个问题。似乎rvm use #{ruby_version}由RVM(输出Using #{path_to_ruby)执行并确认,但列出的gemsets是运行脚本的Ruby版本中的宝石集。

有没有办法通过CLI或API从Rubyscript与RVM通信?

1 个答案:

答案 0 :(得分:1)

我会对此嗤之以鼻 - 我认为你的问题是rvm主要通过修复你的环境变量来将你的shell指向不同的gemsets和ruby版本。

但是当您在子shell 中运行rvm use时,env变量的更改不会传播到父shell。

如果没有对此进行太多研究,我最初的想法是让你运行rvm use +然后在同一个子shell会话中运行一些列出所有这些更新的env变量的内容(参见此处您需要查看哪些:http://beginrescueend.com/rvm/info/)...然后在您的ruby脚本中,您需要设置环境以匹配子shell中的环境。

在shellpeak中你通常在这种情况下做的是“源”脚本而不是执行它。即source "the_script_that_sets_environment_variables"。但是当你使用ruby脚本并使用反引号在子shell中运行东西时,你无法将环境传播回父级,而无需手动执行。

另一种解决方案可能是查看 RVM Ruby API 。我还没有找到很多关于它的文档,但它也可能适合你的情况:
http://www.rubyflow.com/items/4285