2010-12-08 22 views
1

我使用rvm與不同的gemsets和愛它。我遇到的唯一問題是,當我創建新的寶石並挑選我想要的寶石時,似乎需要一段時間才能重新下載寶石。有沒有辦法讓rvm知道使用已經安裝在另一個gemset中的gem?使用rvm時,如何繞過重新下載安裝的寶石?

例如,假設我有一個名爲set1的gemset,並安裝了wirble gem。現在我創建一個名爲set2的新rvm。如果我在set2上「gem install wirble」,它會重新下載Wirble。任何使rvm使用已經在set1中的版本的方法?

編輯1:謝謝大家或迄今的回覆。爲了更清楚地解釋,我覺得奇怪的是,當我想要安裝wirble並且同一個版本已經在我的電腦上時,爲什麼「gem install wrible」需要上網並再次下載相同的東西?爲什麼不從我的電腦本地安裝(即在另一個具有我需要的確切文件的gemset)

編輯2:和我住在同一個版本的紅寶石。所以我的例子假設我使用Ruby 1.9.2。我只是在改變寶石。我不明白爲什麼做一個「寶石安裝線」需要再次下載它只是爲了一個不同的gemset(再次,在相同的紅寶石1.9.2)

+0

你最好的權威答案來源是自己去找人。前往irc.freenode.net的#rvm並與Wayne覈對。或者當您執行`rvm -v`時,通過可用的電子郵件ping他。他的反應非常迅速,而且,誰知道呢,你的問題可能會鼓勵一個新功能。 – 2010-12-09 04:48:53

回答

0

這是設計。讓他們分開是整個觀點。 (所以使用一組不會影響其他,等等)

也許你不需要時使用多個gemsets?例如,不要爲每個rails應用程序使用單獨的gemset,只需使用一個。例如,我使用[email protected]進行我所有的rails 3開發。

或者我想你總是可以手動將它們從一個rvm目錄複製到另一個(我的系統上的~/.rvm/gems/[email protected]/gems/)。當然,這隻適用於針對同一個ruby版本編譯的寶石。

+0

我實際上試圖隔離爲什麼某些寶石似乎不能很好地在一起工作。對於這種情況,我確實希望在每個gemset中混合使用gem組合。 – Lan 2010-12-09 06:50:52

1

另一種選擇是使用Bundler而不是RVM寶石套裝。如果它們已經在您的系統上,那麼它不會下載這些寶石,並且可以爲每個應用程序設置一個唯一的集合。

+0

不幸的是這不是一個真正的答案。 Bundler只是gem依賴管理的前端,可以與RVM gemset結合使用。寶石是寶石的沙盒裝置,而Bundler只能確定哪些寶石應該從寶石上裝載和/或安裝到寶石上。 – markquezada 2010-12-09 00:42:24

+0

我不明白爲什麼這不是答案。 Bundler可以完成基本相同的工作,而無需爲每組下載獨特的寶石。爲什麼寶石需要沙盒? – 2010-12-09 00:50:54

0

如果您擔心堵塞一系列管道,您可能想要查看是否可以在您自己的機器上使用gem server設置一個gem服務器並告訴rvm使用它。

0

谷歌搜索「寶石從本地緩存安裝」打開了這一點:

http://akitaonrails.com/2011/05/29/rubygems-local-cache-hack

它基本上是使用公共寶石服務器作爲上游緩存寶石代理。

甲重量更輕的溶液:

這一個可以讓你選擇地安裝寶石(包括它們的DEPS):

  1. 切換到已安裝所需的寶石一個寶石。
  2. 運行「gem env」以獲取特定於gemset的GEM_PATH。
  3. cd到該寶石路徑,然後是緩存文件夾。這裏是所有的.gem文件。
  4. 不用離開該文件夾,切換到所需寶石應該去的寶石套裝。
  5. 照常運行gem install,但傳遞--local選項。所需的寶石及其代表應自動從當前文件夾中拉出。

如果您確實想要複製gemset,請在gem路徑緩存中運行這些步驟。實際上,這是不需要的,因爲除非必要,否則「rvm gemset copy」不會被下載。

  1. 確保您切換到源gemset(您將從中複製)。
  2. 運行「rvm gemset export」
  3. 編輯default.gems文件並刪除註釋行。
  4. 切換到您要複製的目標gemset。
  5. RUN:gem install --local`cat default.gems`
  6. 可選:刪除default.gems文件。
0

似乎沒有提到的一個RVM功能是copy。時,這是特別有用:

  • 你想一個新的寶石包括大多數的寶石已經在你的寶石一個

  • 也許要隔離在特定的一個寶石並比較兩個版本。或者其他的東西。

你可以做到以下幾點,中取其紅寶石版本上下文是合適的:

rvm gemset copy [email protected]_gemset_name [email protected]_gemset_name

此命令將作出新的寶石是舊的精確克隆,然後你可以刪除並重新安裝有問題的寶石。我這樣做是使用RSpec,除去2.14.1與3.0.0beta比較,像這樣:

gem uninstall rspec -v2.14
gem install rspec -v3.0.0.beta1

有報道說,去與沿其他一些卸載的,但你的想法。結果是我可以運行兩個獨立的測試套件,每個套件都在各自的目錄中,並使用不同的Rspec,只需切換gemsets即可。 < 3 RVM。

編輯:從here得到了主意。