问题
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 <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [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
回答1:
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.
回答2:
Your RVM gem directory should be owned by the rvm
group. So, instead of changing ownership, it might be wise to simply add the user to the rvm
group:
# $(whoami) evaluates to your username
# You may want to change this to a different username depending on your config
# but $(whoami) is a passable default
usermod -a -G rvm $(whoami)
回答3:
This is due to the way you installed ruby.
Frankly, it works *just fine* if you don't mind the sudo. At the end of the day, it's just your laptop... Not some server running in a bank.
If you really care, chown gem folders as needed.
回答4:
I had this happen today. This might be a unique situation, but I had copied a Rails source tree from a system that had RVM installed globally (system-wide in /usr/local/rvm
), to a system that just had RVM installed per-user (~/.rvm
).
I was trying to do bundle install
and getting the "Your user account isn't allowed to install to the system Rubygems." error. After a lot of poking around, I noticed that in my ~/.rvm
directory there was a symbolic link:
~/.rvm/gems/ruby-2.1.1/cache -> /usr/local/rvm/gems/cache
Removing that symlink got bundle install
working again without sudo
.
回答5:
I had the same problem and found out that Bundler before installing new gems checks if it has write permission for all files found $GEM_HOME/build_info. In my case it didn't, because although user that run bundler was in 'rvm' user group and that group owned all those files, group wasn't allowed to write some of them.
That happened because I installed some of the gems under root, which has umask 0022 (all files created by root, can't be written by group) instead of umask 0002 that others have and which rvm expects.
回答6:
If you are using RVM, then do these two steps and you'll be golden
Make sure your user belongs to the RVM group
sudo usermod -a -G rvm myUserName
Make sure build_info is writable for all users in the RVM group
sudo chmod 664 $GEM_HOME/build_info/*
来源:https://stackoverflow.com/questions/16376995/bundler-cannot-install-any-gems-without-sudo