我正在一个小团队工作,并开发了几种供内部使用的宝石。这些宝石是各种相互依赖的,并托管在我的Github帐户上。当我声明对这些宝石的依赖时,我总是声明Gemfile
::git => 'url/for/gem/on/github'
。但是我遇到了Bundler的一些令人困惑的行为 - 我认为:
bundle install
但是Bundler抱怨它无法找到C.如果我在A Gemfile
中使用正确的位置声明C,那么它就不会抱怨。我是否正确地推断Bundler实际上并没有真正关注依赖Gemfile
,而只是看看他们的gemspec
?如果我是,对于我描述的问题是否有更好的解决方案,而不是直接在A Gemfile
中将C声明为A的依赖?
更新:似乎如果你可以在Gemfile
中声明一个Github帐户作为宝石来源,那么这个问题就可以解决了。这可能吗?
答案 0 :(得分:2)
我们最近不得不解决与内部宝石相互依赖的非常相似的情况。我们已经使用了内部git主机(GitLab),但是在gemspec中无法声明包样式git:
和branch:
属性时遇到了同样的问题。
我们的解决方案是设置内部宝石托管。使用geminabox它真的很容易让gem主机启动并运行。运行gem install geminabox
并为您的网络服务创建一个文件夹(我们使用乘客,ymmw):
gems/
public/
tmp/
restart.txt
gems/
config.ru
编辑config.ru
就像这样:
require "rubygems"
require "geminabox"
Geminabox.data = "gems"
run Geminabox
并指向乘客在宝石/公共文件夹中,它将作为正常的机架应用程序启动,供您玩。只需将网址添加到gemfiles中的服务并跳过内部gems的整个git问题,这是我的建议:)
有关geminabox的更多信息可以在他们的github页面上找到:https://github.com/geminabox/geminabox