如何在Gemfile中指定位于Git存储库子目录中的.gemspec

时间:2011-04-27 01:47:07

标签: ruby-on-rails github gem bundle bundler

我在github上分发了spree repo,我想在我的rails app的Gemfile中指定一个位于主存储库的core子目录中的gem。

存储库的文件夹结构如下:

|~spree                   [git root]
| |-spree.gemspec         [spree gem located here]
|~core
| |-spree_core.gemspec    [spree_core gem located here]

换句话说,我想在这些方面做点什么:

gem 'spree-core', :git => 'git://github.com/spree/spree.git'

问题是,当我尝试bundle install时,我收到以下错误消息:

  

在git://github.com/spree/spree.git(在master中)找不到gem'spree-core(> = 0)'。   Source不包含任何版本的'spree-core(> = 0)'

2 个答案:

答案 0 :(得分:6)

您可以做的是创建一个仅包含core子目录和关联的spree_core.gemspec文件的仓库。这将导致更轻薄的安装。您还可以获取目录的内容以与您的应用程序捆绑在一起并按如下方式分发:

gem 'spree-core', :path => 'vendor/gems/spree/core'

bundler从git存储库安装的功能似乎有点受限the documentation,它期望spree_core/spree_core.gemspec而不是core/spree_core.gemspec

宝石创作者的这种疏忽很常见,因为大多数人不希望人们安装除官方发布的宝石之外的任何东西。至少很高兴.gemspec文件可用,因为有些项目甚至没有让很多人感到沮丧。

答案 1 :(得分:5)

这首先出现在谷歌搜索中,并且给出的答案要么永远不正确,要么Bundler改变了它的行为。

在OP中存在拼写错误,错误似乎与原始问题一致。具体而言,spree-core不应该被连字符。

以下应该可以正常工作:

gem 'spree_core', github: 'spree/spree'