Ruby-on-rails 没有 sudo,Bundler 无法安装任何 gem

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16376995/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 21:55:54  来源:igfitidea点击:

Bundler cannot install any gems without sudo

ruby-on-railsrubymacosbundlerosx-mountain-lion

提问by emersonthis

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

我正在尝试安装一个 rails 应用程序,但每次使用bundle它都会失败,但没有sudo. 我目前的情况是,只要sudo所有内容(包括 rails)使用,一切都可以正常工作。我不认为这是正确的。

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 sudobundle will update without this error. But the current situation is that I need sudofor everything, including rake...or rails server, etc. Something isn't right.

对于不同的宝石,这种模式一次又一次地重复。我不明白。为什么会这样?如果我使用sudobundle 将更新而不会出现此错误。但目前的情况是我需要sudo一切,包括rake...rails server等。有些地方不对劲。

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

其他详细信息:我在 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 installwith no errors. Then immediately after bundle installfails with an error like you see above. Why is this?

我可以毫无错误地运行sudo bundle install,这可能是有益的。然后立即bundle install失败并出现如上所示的错误。为什么是这样?

Update2

更新2

/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

回答by Nakilon

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

您可以在您的用户主文件夹中托管 gems,不需要 root 权限:

bundle install --path ~/.gem

bundle install --path ~/.gem

To avoid passing this parameter manually add export GEM_HOME=$HOME/.gemto 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:

为了避免将此参数手动添加export GEM_HOME=$HOME/.gem到您的.bash_profile-- 这解决了 Mac OS 和其他 *nix 系统上的 sudo 问题。然后,您可能还需要访问提供可执行文件(例如捆绑程序)的 gem,因此也添加以下内容:

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

or in some cases:

或在某些情况下:

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


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

参考: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_HOMEor prepend custom one each time you launch rbenv-ed Ruby.

UPD:但请记住,如果您开始使用 rbenv,如果使用相同的环境变量,则在使用不同版本的 Ruby 时可能会导致问题,因此您可能希望在unset GEM_HOME每次启动 rbenv-ed Ruby 时临时或预先自定义一个。

回答by Matthew Clark

Your RVM gem directory should be owned by the rvmgroup. So, instead of changing ownership, it might be wise to simply add the user to the rvmgroup:

您的 RVM gem 目录应该归该rvm组所有。因此,与其更改所有权,不如简单地将用户添加到rvm组中:

# $(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)

回答by Denis de Bernardy

This is due to the way you installed ruby.

这是由于您安装 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.

坦率地说,如果您不介意 sudo,它就可以*很好*。归根结底,这只是您的笔记本电脑……而不是银行中运行的某些服务器。

If you really care, chown gem folders as needed.

如果您真的很在意,请根据需要 chown gem 文件夹。

回答by bjnord

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).

我今天遇到了这种情况。这可能是一种独特的情况,但我已将 Rails 源代码树从已全局安装 RVM(系统范围内/usr/local/rvm)的系统复制到仅为每个用户安装了 RVM 的系统(~/.rvm)。

I was trying to do bundle installand 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 ~/.rvmdirectory there was a symbolic link:

我试图这样做bundle install并得到“您的用户帐户不允许安装到系统 Rubygems”。错误。经过大量的探索,我注意到在我的~/.rvm目录中有一个符号链接:

~/.rvm/gems/ruby-2.1.1/cache -> /usr/local/rvm/gems/cache

Removing that symlink got bundle installworking again without sudo.

删除该符号链接可以在bundle install没有sudo.

回答by snovity

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.

我遇到了同样的问题,发现 Bundler 在安装新 gems 之前会检查它是否对 $GEM_HOME/build_info 找到的所有文件具有写权限。在我的情况下它没有,因为虽然运行 bundler 的用户在 'rvm' 用户组中并且该组拥有所有这些文件,但不允许组写入其中的一些。

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.

发生这种情况是因为我在 root 下安装了一些 gem,它有 umask 0022(所有由 root 创建的文件,不能按组写入)而不是其他人拥有的 umask 0002 以及 rvm 期望的。

回答by Darren Hicks

If you are using RVM, then do these two steps and you'll be golden

如果您使用的是 RVM,那么执行这两个步骤,您将获得成功

  1. Make sure your user belongs to the RVM group

    sudo usermod -a -G rvm myUserName

  2. Make sure build_info is writable for all users in the RVM group

    sudo chmod 664 $GEM_HOME/build_info/*

  1. 确保您的用户属于 RVM 组

    sudo usermod -a -G rvm myUserName

  2. 确保 build_info 对 RVM 组中的所有用户都是可写的

    sudo chmod 664 $GEM_HOME/build_info/*

回答by betoharres

Go to Arch linux wiki https://wiki.archlinux.org/index.php/Ruby

转到 Arch linux wiki https://wiki.archlinux.org/index.php/Ruby

Scrolldown to the Bundlersection and follow the steps. It worked for me maybe because I'm using Arch.

向下滚动到该Bundler部分并按照步骤操作。它对我有用,也许是因为我正在使用 Arch。