Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to specify in Gemfile a .gemspec located in a subdirectory of a Git repository

I forked the spree repo on github and I would like to specify in the Gemfile of my rails app a gem that is located in the core subdirectory of the main repository.

The folder structure of the repository is the following:

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

In other words, I would like to do something along these lines:

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

The problem is that I'm getting the following error message when I try bundle install:

Could not find gem 'spree-core (>= 0)' in git://github.com/spree/spree.git (at master). Source does not contain any versions of 'spree-core (>= 0)'

like image 940
Matt Avatar asked Apr 27 '11 01:04

Matt


2 Answers

What you can do is create a repo that only contains the core subdirectory and associated spree_core.gemspec file. This will lead to a slimmer installation as well. You can also grab the contents of the directory to bundle with your app and distribute it like this:

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

The ability of bundler to install from a git repository appears to be somewhat limited according to the documentation where it is expecting spree_core/spree_core.gemspec and not core/spree_core.gemspec instead.

This oversight on the part of the gem creator is common since most do not expect people to be installing anything other than the officially published gem. At least it's nice that the .gemspec file is available as some projects don't even include that much to the dismay of many.

like image 164
tadman Avatar answered Sep 27 '22 23:09

tadman


This came up first on a google search and the answer given either was never correct or Bundler's changed it's behaviour.

In the OP there was a spelling mistake and the error seems consistent with that being the original problem. Specifically spree-core should not have been hyphenated.

The following should work fine:

gem 'spree_core', github: 'spree/spree'
like image 32
mushishi78 Avatar answered Sep 27 '22 23:09

mushishi78