How can I specify a local gem in my Gemfile?

Ruby on-RailsRubyRuby on-Rails-3RubygemsBundler

Ruby on-Rails Problem Overview


I'd like Bundler to load a local gem. Is there an option for that? Or do I have to move the gem folder into the .bundle directory?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

I believe you can do this:

gem "foo", path: "/path/to/foo"

Solution 2 - Ruby on-Rails

In addition to specifying the path (as Jimmy mentioned) you can also force Bundler to use a local gem for your environment only by using the following configuration option:

$ bundle config local.GEM_NAME /path/to/local/git/repository

This is extremely helpful if you're developing two gems or a gem and a rails app side-by-side.

Note though, that this only works when you're already using git for your dependency, for example:

# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'

# In your terminal
$ bundle config local.rack ~/Work/git/rack

As seen on the docs.

Solution 3 - Ruby on-Rails

You can also reference a local gem with git if you happen to be working on it.

gem 'foo',
  :git => '/Path/to/local/git/repo',
  :branch => 'my-feature-branch'

Then, if it changes I run

bundle exec gem uninstall foo
bundle update foo

But I am not sure everyone needs to run these two steps.

Solution 4 - Ruby on-Rails

In order to use local gem repository in a Rails project, follow the steps below:

  1. Check if your gem folder is a git repository (the command is executed in the gem folder)

    git rev-parse --is-inside-work-tree
    
  2. Getting repository path (the command is executed in the gem folder)

    git rev-parse --show-toplevel
    
  3. Setting up a local override for the rails application

    bundle config local.GEM_NAME /path/to/local/git/repository
    

    where GEM_NAME is the name of your gem and /path/to/local/git/repository is the output of the command in point 2

  4. In your application Gemfile add the following line:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
  5. Running bundle install should give something like this:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
    

where GEM_NAME is the name of your gem and /path/to/local/git/repository from point 2

  1. Finally, run bundle list, not gem list and you should see something like this:

    GEM_NAME (0.0.1 5a68b88)
    

    where GEM_NAME is the name of your gem


A few important cases I am observing using:

Rails 4.0.2  
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10  
RubyMine 6.0.3
  • It seems RubyMine is not showing local gems as an external library. More information about the bug can be found here and here

  • When I am changing something in the local gem, in order to be loaded in the rails application I should stop/start the rails server

  • If I am changing the version of the gem, stopping/starting the Rails server gives me an error. In order to fix it, I am specifying the gem version in the rails application Gemfile like this:

     gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    

Solution 5 - Ruby on-Rails

You can reference gems with source:

source: 'https://source.com', git repository (:github => 'git/url') and with local path

:path => '.../path/gem_name'.

You can learn more about [Gemfiles and how to use them] (https://kolosek.com/rails-bundle-install-and-gemfile) in this article.

Solution 6 - Ruby on-Rails

If you want the branch too:

gem 'foo', path: "point/to/your/path", branch: "branch-name"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpicardoView Question on Stackoverflow
Solution 1 - Ruby on-RailsJimmyView Answer on Stackoverflow
Solution 2 - Ruby on-RailsbloudermilkView Answer on Stackoverflow
Solution 3 - Ruby on-RailsRimianView Answer on Stackoverflow
Solution 4 - Ruby on-RailsgotqnView Answer on Stackoverflow
Solution 5 - Ruby on-RailsNesha ZoricView Answer on Stackoverflow
Solution 6 - Ruby on-RailsC JohnsonView Answer on Stackoverflow