2010-12-08 24 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得到了主意。