Ruby Bundler在Gemfile中有多个来源

maw*_*044 30 ruby bundler gemfile

我需要确保我的一些宝石是从我们自己的宝石存储库而不是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'
Run Code Online (Sandbox Code Playgroud)

Tim*_*ore 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
Run Code Online (Sandbox Code Playgroud)

或将其指定为选项:

source "https://rubygems.org"

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2'

gem 'gemfromourrepo', source: "http://our.own.gem.repo.com/the/path/to/it"
Run Code Online (Sandbox Code Playgroud)

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


gtd*_*gtd 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'
Run Code Online (Sandbox Code Playgroud)


Sha*_*cci 4

我发现的唯一方法似乎是一个可怕的黑客。

Bundler 将从最后列出的源开始搜索 gem 的最佳版本,然后搜索前面列出的所有源。源线相对于宝石线的位置并不重要,重要的是彼此之间的相对关系。

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

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

source :rubygems
source 'http://myrepo'    
gem 'gemfromourrepo', '~> 2.ourrepo'
Run Code Online (Sandbox Code Playgroud)

那么最匹配的版本应该是来自您的服务器的版本。有人有可能将自己与 2.ourrepo.2 同名的 gem 推送到 ruby​​gems,但如果它是唯一的,则不太可能。