rantingsonrails
rantingsonrails

Reputation: 568

Gemfile gem installation and gemspec dependencies

I have an app whose Gemfile requires a gem that is also dependent on another gem that is currently found on github.

So app/Gemfile reads gem "my-gem", :git => "git://github.com/MyCompany/my-gem.git"

my-gem/Gemfile reads gem "my-gem-2", :git => "[email protected]:MyCompany/my-gem-2.git"

my-gem/my-gem.gemspec reads spec.add_dependency "my-gem-2"

When I run bundle inside of app I get an error that it can't find gem my-gem-2 which is required by my-gem; however, if I put the following line gem "my-gem-2", :git => "[email protected]:MyCompany/my-gem-2.git" inside of app/Gemfile then it works fine.

This practice seems redundant as I wouldn't think I'd have to add gem dependencies of another gem into my parent app. Is there something I'm doing wrong here that myapp can't find my-gem-2?

Upvotes: 3

Views: 5359

Answers (2)

fmendez
fmendez

Reputation: 7338

As stated in the gem specification, the list of gems that you provide through add_dependency will be use to make sure those are already installed in the system during the installation process (i.e gem install). So this line:

my-gem/my-gem.gemspec reads spec.add_dependency "my-gem-2"

Will trigger the verification of whether or not the gem is installed in the system, but it will not trigger any automatic installation of such gem, as Bundler would do.

This other line (inside of your gem):

gem "my-gem-2", :git => "[email protected]:MyCompany/my-gem-2.git"

Specify that a gem should come from a git repository with a .gemspec at its root.

For more details: Gems from git repositories

Upvotes: 2

pat
pat

Reputation: 16226

This is just the way it goes - Gemfile dependencies within gems are just for when you're developing that gem. Only the gemspec gets evaluated when the gem is used elsewhere (and gemspecs have no concept of git dependencies), hence only dependencies in the gemspec apply.

So: you will need to have both git references within your app's Gemfile.

Upvotes: 4

Related Questions