Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
683 views
in Technique[技术] by (71.8m points)

ruby on rails - Bundler cannot install any gems without sudo

I'm trying to install a rails app and every time I use bundle it fails without sudo. My current situation is that everything works as long as use sudo for everything, including rails. I don't think this is correct.

For example:

$ bundle update
Updating git://github.com/refinery/refinerycms.git
Fetching gem metadata from https://rubygems.org/.......
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Enter your password to install the bundled RubyGems to your system: 
Using rake (10.0.4) 
Using i18n (0.6.1) 
Using multi_json (1.7.2) 
Using rack-cache (1.2) 
Using rack-test (0.6.2) 
Installing hike (1.2.2) 
Errno::EACCES: Permission denied - /usr/local/rvm/gems/ruby-1.9.3-p194/build_info/hike-1.2.2.info
An error occurred while installing hike (1.2.2), and Bundler cannot continue.
Make sure that `gem install hike -v '1.2.2'` succeeds before bundling.

But then I do what it says and it works:

$ gem install hike -v '1.2.2' 
Successfully installed hike-1.2.2
Parsing documentation for hike-1.2.2
Installing ri documentation for hike-1.2.2
Done installing documentation for hike after 0 seconds
1 gem installed

This pattern repeats again and again for different gems. I don't get it. Why is this happening? If I use sudo bundle will update without this error. But the current situation is that I need sudo for everything, including rake... or rails server, etc. Something isn't right.

Additional details: I'm on OSX 10.8.3...

$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0]
$ gem -v
2.0.3
$ rvm -v
rvm 1.19.6 (stable) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/]

$ which ruby
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby
$ which gem
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/gem
$ which rvm
/usr/local/rvm/bin/rvm

Update

It may be informative that I can run sudo bundle install with no errors. Then immediately after bundle install fails with an error like you see above. Why is this?

Update2

/usr/local/rvm[master]$ ls -l
total 56
-rw-rw-r--   1 root  rvm   566 May  4 12:59 LICENCE
-rw-rw-r--   1 root  rvm  8929 May  4 12:59 README
-rw-rw-r--   1 root  rvm     7 May  4 12:59 RELEASE
-rw-rw-r--   1 root  rvm     7 May  4 12:59 VERSION
drwxrwsr-x   3 root  rvm   102 May  4 01:34 archives
drwxrwsr-x  35 root  rvm  1190 May  4 12:59 bin
drwxrwsr-x  11 root  rvm   374 May  4 12:59 config
drwxrwsr-x   6 root  rvm   204 Jan 10 19:55 contrib
drwxrwsr-x   5 root  rvm   170 Jan 10 19:55 environments
drwxrwsr-x   3 root  rvm   102 Jan 10 19:55 examples
drwxrwsr-x   5 root  rvm   170 Jan 10 19:52 gems
drwxrwxr-x   6 ESL   rvm   204 May  4 12:59 gemsets
drwxrwsr-x  92 root  rvm  3128 May  4 01:34 help
drwxrwsr-x  11 root  rvm   374 May  4 01:34 hooks
-rw-rw-r--   1 root  rvm    11 May  4 12:59 installed.at
drwxrwsr-x   4 root  rvm   136 Jan 10 19:54 lib
drwxrwsr-x   5 root  rvm   170 May  4 12:55 log
drwxrwsr-x   2 root  rvm    68 Jan 10 19:52 man
drwxrwsr-x   9 root  rvm   306 Jan 10 19:52 patches
drwxrwxr-x   4 ESL   rvm   136 May  4 12:59 patchsets
drwxrwsr-x   4 root  rvm   136 Jan 10 19:55 rubies
drwxrwsr-x  64 root  rvm  2176 May  4 01:34 scripts
drwxrwsr-x   3 root  rvm   102 May  4 01:34 src
drwxrwsr-x   2 root  rvm    68 Jan 10 19:52 tmp
drwxrwsr-x   8 root  rvm   272 May  4 12:59 user
drwxrwsr-x   4 root  rvm   136 Jan 10 19:52 usr
drwxrwsr-x   5 root  rvm   170 Jan 10 19:55 wrappers
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You may host gems in your user home folder, that does not need root permissions:

bundle install --path ~/.gem

To avoid passing this parameter manually add export GEM_HOME=$HOME/.gem to your .bash_profile -- this solves sudo issue on Mac OS and other *nix systems. You then also might need to have access to gems that provide executables (such as bundler), so add this too:

PATH=$PATH:$HOME/.gem/bin

or in some cases:

PATH=$PATH:$HOME/.gem/ruby/<version>/bin

ref: https://stackoverflow.com/a/5862327/322020


UPD: But keep in mind that if you start using rbenv having this environment variable be the same might cause problems when using too different versions of Ruby, so you might want to temporary unset GEM_HOME or prepend custom one each time you launch rbenv-ed Ruby.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...