我正在使用不同宝石的rvm并喜欢它。我遇到的唯一问题是,当我创建新的宝石并选择我想要的宝石时,似乎需要一段时间才能重新下载宝石。有没有办法让rvm知道使用已安装在另一个gemset中的gem?
例如,假设我有一个名为set1的gemset,并安装了wirble gem。现在我创建一个名为set2的新rvm。如果我在set2上“gem install wirble”,它似乎会再次下载wirble。有什么办法让rvm使用已经在set1中的版本?
编辑1:感谢大家或回复到目前为止。只是为了更清楚地解释一下,我觉得很奇怪的是当我想安装wirble并且我的计算机上已经存在SAME EXACT版本时,为什么“gem install wrible”需要上网并再次下载同样的东西?为什么不在本地安装我的计算机(即在另一个拥有我需要的确切文件的gemset中)
编辑2:我正在使用同一版本的ruby。所以我的例子是假设我使用的是ruby 1.9.2。我只改变了宝石。我不明白为什么做一个“宝石安装wirble”需要再次下载它只是为了一个不同的宝石集(再次,在相同的红宝石1.9.2)
答案 0 :(得分:1)
另一个选择是使用Bundler而不是RVM gem集。如果它们已经在您的系统上,则不会下载宝石,并且允许您为每个应用程序设置一个唯一的宝石。
答案 1 :(得分:0)
这是设计的。将它们分开是重点。 (因此,使用一组不影响另一组等)。
也许你不需要时使用多个gemsets?例如,不要为每个rails应用程序使用单独的gemset,只需使用一个。例如,我使用ruby-1.9.2-p0@rails3
进行所有rails 3开发。
或者我想你总是可以手动将它们从一个rvm目录复制到另一个rvm目录(我系统上的~/.rvm/gems/ruby-1.9.2-p0@rails3/gems/
)。当然,这只适用于针对相同ruby版本编译的gem。
答案 2 :(得分:0)
如果您担心堵塞一系列电子管,您可能想看看是否可以使用gem server
在您自己的机器上设置gem服务器并告诉rvm使用它。
答案 3 :(得分:0)
谷歌搜索“从本地缓存安装宝石”出现了这个:
http://akitaonrails.com/2011/05/29/rubygems-local-cache-hack
它基本上是一个使用公共gem服务器作为上游的缓存gem代理。
轻量级解决方案:
这个允许您有选择地安装宝石(包括他们的deps):
如果您确实要复制gemset,请在gem路径缓存中运行这些步骤。实际上这不是必需的,因为除非必要,否则“rvm gemset copy”不会下载。
答案 4 :(得分:0)
似乎没有提及的一个RVM功能是copy
。这在以下情况下特别有用:
您想制作一个新宝石 B ,其中包含宝石中已有的大部分宝石 A
也许你想要特别隔离一个宝石并比较两个版本。或者别的什么。
您可以在适当的ruby版本上下文中执行以下操作:
rvm gemset copy 1.9.4-p448@old_gemset_name 1.9.3-p448@new_gemset_name
此命令将生成一个新的gemset,它是旧的gemite的精确克隆,然后您可以删除并重新安装有问题的gem。我用Rspec做了这个,删除了2.14.1以与3.0.0beta进行比较,如下所示:
gem uninstall rspec -v2.14
gem install rspec -v3.0.0.beta1
还有一些其他的卸载,但你明白了。结果是我可以运行两个单独的测试套件,每个测试套件在各自的目录中并使用不同的Rspec,只需切换gemsets即可。 < 3 RVM。
编辑:从here获得了这个想法。