您没有对/var/lib/gems/2.3.0目录的写许可权


104

我在Ubuntu 16.04上安装了ruby。

$which ruby  

/usr/bin/ruby

$ruby -v 

ruby 2.3.0p0 (2015-12-25) [x86_64-linux-gnu]

$gem install bundler 

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /var/lib/gems/2.3.0 directory.

任何帮助将不胜感激!


您可以尝试安装RVM并安装更新版本的ruby,例如2.3.3
Anton Skovorodko

对于注释3:包“中的python-软件属性”不可用,你应该更换软件-属性-通用
旧金山佩德拉萨

1
RVM选项,甚至将纯净的“用户安装”作为更好的和简单的安装(而不是全局的,需要权限的安装),可能比修改权限要好得多!
弗兰克·诺克

8
我希望此信息流能够解释为什么该OP会出现此问题,以及为什么他们应该放弃Ruby版本而转而支持Ruby和多个安装管理器(RVM或RBEVN)。我无法确定此处的建议是否仅基于个人喜好。我希望这个建议背后还有更多。
BaldEagle

Answers:


153

您首先需要使用卸载类似Ubuntu的ruby sudo apt-get remove ruby

然后根据他们的文档使用rbenvruby-build重新安装ruby :

cd $HOME
sudo apt-get update 
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL

rbenv install 2.3.1
rbenv global 2.3.1
ruby -v

最后一步是安装Bundler:

gem install bundler
rbenv rehash

然后享受吧!

德里克


8
说明如何安装红宝石(on Rails的)在这里gorails.com/setup/ubuntu/16.04
安德烈Rehmann

5
我很乐意进行卸载,因为它也需要卸载相关程序(vim-gnome例如)。我想我更想知道为什么首先需要/var/lib/...为用户安装写信...我在不需要的sudo gem install时候做了吗?
PlasmaBinturong '16

4
我同意@AntonSkovorodko,如果答案可以证明卸载Ruby是合理的,那就太好了
blong

4
在Cinnamon环境(在Linux Mint 18.2中发生)中卸载Ruby时要小心,重新启动后我无法以图形方式运行系统。当您遇到这种情况时,请通过转到CLI,Ctrl+Alt+F1然后运行以下命令(再次卸载并安装Cinnamon): sudo apt purge cinnamon && sudo apt install cinnamon
Kout

2
随着年龄的增长,您可能想知道最新的rbenv install -l可用版本:列出所有可用版本,然后列出rbenv install 2.5.12.5.1版本或您想要的任何版本。
Paul Sturm,

60

如果要使用发行版Ruby而不是rb-env / rvm,则可GEM_HOME以为当前用户设置一个。首先创建一个目录来为您的用户存储Ruby gem :

$ mkdir ~/.ruby

然后更新您的外壳程序以将该目录用于该目录,GEM_HOME并更新您的PATH变量以包括Ruby gem bin目录。

$ echo 'export GEM_HOME=~/.ruby/' >> ~/.bashrc
$ echo 'export PATH="$PATH:~/.ruby/bin"' >> ~/.bashrc
$ source ~/.bashrc

(最后一行将在您当前的shell中重新加载环境变量。)

现在,您应该可以使用以下gem命令在用户下安装Ruby gems 。我能够在Ubuntu 18.04下使用Ruby 2.5.1进行此操作。如果您使用的不是Bash外壳程序,则需要编辑该外壳程序的启动脚本,而不是bashrc


2
我这样做了,然后收到一个关于“找不到红宝石的头文件”的错误,然后我读到了这个:stackoverflow.com/a/4502672/2245874,没有遵循所有内容,但是做了sudo apt install ruby -宝石,然后对我有用。
抢劫

1
我相信@robm表示ruby-dev不是ruby-gems
Altreus,

3
这对于不需要针对多个版本进行开发的红宝石用户可能更合适。
danielcooperxyz

1
您描述了一种非常好的Linux方式来修复我的ruby安装,而无需任何其他工具,只是不错的旧bash :)
Denis Trofimov

30

(2019年1月)要使用Rbenv脚本安装Ruby,请执行以下步骤:

1.首先,更新packages索引并安装ruby-build工具从源代码构建Ruby所需的软件包:

sudo apt-get remove ruby
sudo apt update
sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev

2.接下来,运行以下curl命令以安装rbenv和ruby-build:

curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -

3.将$ HOME / .rbenv / bin添加到系统PATH。

如果使用的是Bash,请运行:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

如果您使用的是Zsh,请运行:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

4.安装最新的稳定版Ruby,并使用以下命令将其设置为默认版本:

rbenv install 2.5.1
rbenv global 2.5.1

要列出所有可用的Ruby版本,可以使用: rbenv install -l

5.通过打印出版本号来验证Ruby是否已正确安装:

ruby -v

# Output
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

消息来源:如何在Ubuntu 18.04上安装Ruby

编辑:安装rubygems:

sudo apt-get install rubygems

2
这很棒!简洁明了。我完全遵循了它(除了.zshrc我手动进行的更改之外),它运行得很好。用与您添加安装方式相同的方式rubygems,建议您添加如何稍后更新已安装的ruby版本的方法(我猜您只是再次运行rbenv installrbenv global命令,并可能rbenv uninstall
删除

1
这真太了不起了!在Ubuntu 18.04 WSL上完美运行。
robe007

1
这是更优雅的答案。
rashedcs

14

而不是更改所有者(可能会锁定其他本地用户),或者(有一天)将您自己的Ruby服务器/部署事物...在其他用户下运行...

我宁愿简单地将特定文件夹的权限扩展给...好,每个人:

cd /var/lib
sudo chmod -R a+w gems/

(我也确实遇到了您的错误。因此我们对此进行了充分验证。)


1
我还需要解决/ usr / local / bin文件夹的问题,但此解决方案确实有效:“错误:执行gem ...(Gem :: FilePermissionError)时,您没有对/ usr / local / bin目录的写入权限。”
eb80

10

尝试chown -R在该var/lib/gems目录上使用,rubyusername在此示例中将所有权分配给用户[ ],该用户将使用gem安装和开发。

 # chown -R rubyusername:rubyusername /var/lib/gems 

这将递归地更改gems目录下的所有内容。为了在多用户系统上提高安全性,您还可以创建一个组,而不是单独使用rubyusername,然后将用户添加到该组中。


2
它可以解决该问题,但会弹出另一个问题:错误:执行gem ...(Gem :: FilePermissionError)时,您没有对/ usr / local / bin目录的写权限;所以我猜想是不是授权导致了其他问题。
德里克

3

基于上述derek的回答,通常不建议您将系统提供的Ruby实例用于您自己的开发工作,因为系统工具可能取决于Ruby安装的特定版本或位置。类似于Mac OSX的答案,您将需要遵循derek的说明来使用rbenv之类的东西(RVM是类似的替代品)来安装您自己的Ruby实例。

但是,不需要卸载Ruby的系统版本,rbenv安装说明提供了一种机制,可确保外壳程序中可用的Ruby实例是rbenv实例,而不是系统实例。这是

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

derek的答案中有一行。


2

我在GitHub Actions中遇到了相同的错误。添加sudo解决了这个问题。

sudo gem install bundler

0

重新安装Compass对我有用。

sudo gem install -n /usr/local/bin compass

0

Ubuntu 20.04:

选项1-为您的用户帐户设置gem安装目录

对于bash(对于zsh,我们.zshrc当然会使用)

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

选项2-使用对齐

卸载apt-version(ruby-full),然后使用重新安装snap

sudo apt-get remove ruby
sudo snap install ruby --classic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.