2011-07-03 133 views
1

我正试图获取有关在RVM中安装的ruby版本以及相关的gemsets和gems的信息。如何从ruby与RVM进行交互?

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

有没有什么办法通过CLI或API从Rubyscript与RVM进行通信?

+2

你的来源是什么样子? – sarnold

+0

我编辑了源代码到问题 – NobbZ

+0

我不知道你的问题的答案,但你可以使用'rvm gemset list_all' –

回答

1

我会采取这样的措施 - 我认为你的问题是,rvm主要是通过环境变量来使你的shell指向不同的gemset和ruby版本。

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

我还没有仔细研究过这个问题,我最初的想法是运行rvm use这个事情,然后在同一个子shell会话中运行一些列出所有这些更新环境变量内容的东西(请参阅这里,需要看看:http://beginrescueend.com/rvm/info/)...然后在你的Ruby脚本中,你需要设置环境以匹配你的子shell中的环境。

在shellspeak中,您通常在这种情况下执行的操作是“源”脚本而不是执行它。即source "the_script_that_sets_environment_variables"。但是当你在ruby脚本中使用反引号在子shell中运行东西时,如果不手动执行,则不能将环境传播回父代。

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

+0

RVM-API正是我需要的这个项目,谢谢Casper! – NobbZ