我需要确保我的一些宝石是从我们自己的宝石存储库而不是rubygems安装的,而其余的都是从rubygems安装的。 我是否可以在Gemfile中进行设置,而不必担心与Rubygems中具有相同名称的gem的命名冲突? 如何确定从哪里下载gem?

例如Gemfile:

source :rubygems  
gem 'gemfromrubygems1'  
gem 'gemfromrubygems2'

source "http://our.own.gem.repo.com/the/path/to/it"  
gem 'gemfromourrepo'

===============>>#1 票数:47

Bundler 1.7有一个新功能,允许您通过将它们嵌套在块中来选择特定gem的源:

source "https://rubygems.org"

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2'

source "http://our.own.gem.repo.com/the/path/to/it" do
  gem 'gemfromourrepo'
end

或将其指定为选项:

source "https://rubygems.org"

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2'

gem 'gemfromourrepo', source: "http://our.own.gem.repo.com/the/path/to/it"

有关详细信息,请参见http://bundler.io/v1.7/gemfile.html

===============>>#2 票数:6

根据Gemfile中的源优先级部分,从最后输入到第一次输入的源页面搜索源。

根据你所说的,听起来你总是喜欢你的宝石而不是rubygems.org 只要您不需要改变您的偏好(即来自rubygems.org一些重复和来自私人仓库的一些重复),那么您的问题只需使用以下Gemfile即可解决:

source 'https://rubygems.org'
source 'http://our.own.gem.repo.com/the/path/to/it'

gem 'gemfromrubygems1'  
gem 'gemfromrubygems2'
gem 'gemfromourrepo'

===============>>#3 票数:4

我找到的唯一方法似乎是一个可怕的黑客。

Bundler将从最后列出的源搜索最佳版本的gem,然后搜索之前列出的所有源。 源线相对于宝石线的位置无关紧要,只相对于彼此。

我尝试使用:git和:path来使其工作,但这些都不适用于gemservers。 这留下了匹配最好的版本。

如果将gem的版本设置为2.mine.1并将其推送到服务器,则可以限制Gemfile中的版本。

source :rubygems
source 'http://myrepo'    
gem 'gemfromourrepo', '~> 2.ourrepo'

然后,最佳匹配版本应该是您服务器中的一个。 有可能有人可以用2.ourrepo.2将自己同名的宝石推到rubygems,但如果它是独一无二的,这是不可能的。

===============>>#4 票数:1

path命令可能会有所帮助。 它允许您设置特定于宝石的来源

gem "foo", "1.0", :path => "bar"

资料来源: http//bundler.io/v1.3/man/gemfile.5.html

  ask by mawk044 translate from so

未解决问题?本站智能推荐: