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.
根据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)
我发现的唯一方法似乎是一个可怕的黑客。
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 推送到 rubygems,但如果它是唯一的,则不太可能。