2011-07-03 176 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