我们有一个内部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?
如果在我们的网站上找不到社区来源,那就更好了。
答案 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上声明并突然安装。