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?
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.
:path
attribute will install the gem from that path on your local machine.gem "foreman", path: "/Users/pje/my_foreman_fork"
: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.)
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.
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")
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.
Adding .gem
to vendor/cache
seems to work. No options required in Gemfile
.
I found it easiest to run my own gem server using geminabox
See these simple instructions.