使用带两个源的gem install时指定源

时间:2015-02-05 17:26:01

标签: ruby gem

我们有一个内部gem服务器(http://my.gem.server),在这个服务器上我们存储了gem foo-1.2.3.gem

我们的用户将此服务器添加到gem源。我们的宝石源看起来像::

*** CURRENT SOURCES ***

https://rubygems.org/
http://my.gem.server/

到目前为止它工作得非常好。

然后社区中的某个人创建了foo-0.0.1.gem

现在,当我们的内部客户端执行gem安装时,安装了来自社区的foo-0.0.1.gem而不是我们的foo-1.2.3.gem

我们已经尝试将我们的源码放在标准的rubygems.org之前,但仍然得到相同的结果。

有谁知道如何告诉gem install从内部源获取gem?

如果在我们的网站上找不到社区来源,那就更好了。

3 个答案:

答案 0 :(得分:5)

您有两种选择:

在命令

中指定源

gem install --source http://my.gem.server/ install foo

编辑${HOME}/.gemrc文件

变化

:sources:
  - http://rubygems.org
  - http://my.gem.server

:sources:
  - http://my.gem.server
  - http://rubygems.org

答案 1 :(得分:0)

要添加@ ptierno的答案,如果您有Gemfile.gemspec,则可以使用:source参数。

gem 'foo', :source => 'http://my.gem.server'

仅为该gem提供该服务器的优先级。

答案 2 :(得分:0)

在你的Gemfile中,将所有宝石分成源块:

source "http://my.gem.server/" do
  gem "foo"
end

source "https://rubygems.org/" do
  gem "rails"
end

使用全局source行和/或使用:source消除歧义可能会让您遇到安全问题,因为这些问题实际上并不像您期望的那样: http://collectiveidea.com/blog/archives/2016/10/06/bundlers-multiple-source-security-vulnerability/ 任何内部宝石名称都可能在rubygems.org上声明并突然安装。