Ruby Bundler在Gemfile中的多个源代码

apeeds0o  于 2023-04-05  发布在  Ruby
关注(0)|答案(4)|浏览(172)

我需要确保我的一些gem是从我们自己的gem仓库而不是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'
xuo3flqw

xuo3flqw1#

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

ogsagwnx

ogsagwnx2#

根据Gemfile手册页中的Source Priority部分,从最后输入到第一次输入的顺序搜索源。
根据你所说的,听起来你想总是喜欢你的gem而不是rubygems.org。只要你不需要改变你的偏好(例如,一些dup来自rubygems.org,一些dup来自你的私人repo),那么你的问题就可以简单地通过以下Gemfile解决:

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

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

tkqqtvp13#

我发现的唯一方法似乎是一个可怕的黑客。
Bundler将从最后列出的源代码开始搜索您的gem的最佳版本,然后搜索之前列出的所有源代码。源代码行相对于gem行的位置无关紧要,只是相对于彼此。
我尝试使用:git和:path来使它工作,但这两个都不适用于gemservers。
如果您将gem的版本设置为2.mine.1并将其推送到服务器,则可以在Gemfile中约束该版本。

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

那么最匹配的版本应该是你的服务器上的一个。有可能有人会把自己的同名gem 2.ourrepo.2推到rubygems上,但如果它是唯一的,那就不太可能了。

cczfrluj

cczfrluj4#

path命令可能会有所帮助,它允许您设置gem特定的源代码

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

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

相关问题