How do I specify local .gem files in my Gemfile?

RubyRubygemsBundler

Ruby Problem Overview


I have a couple of gem files which I install via gem install xx.gem. Can I tell Bundler to use them? Or do I have to specify the source path?

Ruby Solutions


Solution 1 - Ruby

This isn't strictly an answer to your question about installing .gem packages, but you can specify all kinds of locations on a gem-by-gem basis by editing your Gemfile.

###Specifying a :path attribute will install the gem from that path on your local machine.

gem "foreman", path: "/Users/pje/my_foreman_fork"

###Alternately, specifying a :git attribute will install the gem from a remote git repository.

gem "foreman", git: "git://github.com/pje/foreman.git"

# ...or at a specific SHA-1 ref
gem "foreman", git: "git://github.com/pje/foreman.git", ref: "bf648a070c"

# ...or branch
gem "foreman", git: "git://github.com/pje/foreman.git", branch: "jruby"

# ...or tag
gem "foreman", git: "git://github.com/pje/foreman.git", tag: "v0.45.0"

(As @JHurrah mentioned in his comment.)

Solution 2 - Ruby

Seems bundler can't use .gem files out of the box. Pointing the :path to a directory containing .gem files doesn't work. Some people suggested to setup a local gem server (geminabox, stickler) for that purpose.

However, what I found to be much simpler is to use a local gem "server" from file system: Just put your .gem files in a local directory, then use "gem generate_index" to make it a Gem repository

mkdir repo
mkdir repo/gems
cp *.gem repo/gems
cd repo
gem generate_index

Finally point bundler to this location by adding the following line to your Gemfile

source "file://path/to/repo"

If you update the gems in the repository, make sure to regenerate the index.

Solution 3 - Ruby

I would unpack your gem in the application vendor folder

gem unpack your.gem --target /path_to_app/vendor/gems/

Then add the path on the Gemfile to link unpacked gem.

gem 'your', '2.0.1', :path => 'vendor/gems/your'

Solution 4 - Ruby

By default Bundler will check your system first and if it can't find a gem it will use the sources specified in your Gemfile.

Solution 5 - Ruby

You can force bundler to use the gems you deploy using "bundle package" and "bundle install --local"

On your development machine:

bundle install

(Installs required gems and makes Gemfile.lock)

bundle package

(Caches the gems in vendor/cache)

On the server:

bundle install --local

(--local means "use the gems from vendor/cache")

Solution 6 - Ruby

Adding .gem to vendor/cache seems to work. No options required in Gemfile.

Solution 7 - Ruby

I found it easiest to run my own gem server using geminabox

See these simple instructions.

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
QuestionddayanView Question on Stackoverflow
Solution 1 - RubypjeView Answer on Stackoverflow
Solution 2 - RubyMartin ThiedeView Answer on Stackoverflow
Solution 3 - RubyedapView Answer on Stackoverflow
Solution 4 - RubyJHurrahView Answer on Stackoverflow
Solution 5 - RubyHenry CollingridgeView Answer on Stackoverflow
Solution 6 - RubyVictor MorozView Answer on Stackoverflow
Solution 7 - RubyDave SagView Answer on Stackoverflow