Specify gem installation directory

2019-02-04 05:14发布

问题:

I have some trouble here. I am working with a Rails 2.3 project (working on the production server through ssh - don't ask why). Here is the Gemfile. When delayed_jobs is trying to start, the output says I need to install the bundler gem. The problem is that the gemdir is /var/lib/gems/1.8/ and I don't have the write priviliges for that directory. However there is a directory under ~/projects/shared/gems/ruby/1.8/gems where I can write.

How can I define the installation path for a gem?

回答1:

You can add the following to your config.ru file:

ENV['GEM_HOME']="#{ENV['HOME']}/projects/shared/gems/ruby/1.8/gems"
ENV['GEM_PATH']="#{ENV['GEM_HOME']}:/var/lib/ruby/gems/1.8"
require 'rubygems'
Gem.clear_paths

This will tell your rack app where to look for gems.

Also configure your server .bashrc:

export GEM_HOME="$HOME/projects/shared/gems/ruby/1.8/gems"
export GEM_PATH="$GEM_HOME:/var/lib/ruby/gems/1.8"


回答2:

To install foo gem to a specified folder, just use --install-dir option, i.e.

$ gem install --install-dir /path/to/gems/folder foo

It helps when:

  • one cannot use bundle install - e.g. if one wants to install bundle gem itself, or wants to install a gem (which is not listed in Gemfile) into the bundle folder
  • sudo gem install command fails due to lack of write-permissions for a default installation path

Hope that helps.



回答3:

The environment variable GEM_HOME defines the gem installation location. You need to set it to desired location. The command is OS specific.

In Windows it is set

set GEM_HOME=[path]/projects/shared/gems/ruby/1.8/gems

Linux would be export

export GEM_HOME=~/projects/shared/gems/ruby/1.8/gems


回答4:

You can also just set a bundle install path using a Bundler configuration file. I wrote a post that you can check out if you'd find it helpful.



回答5:

bundler accepts a --path option.

bundle install --path vendor/bundle