您没有 /var/lib/gems/2.3.0 目录的写入权限

You don't have write permissions for the /var/lib/gems/2.3.0 directory

我的 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.

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

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

递归地 改变了gems 目录下的所有内容。为了在多用户系统上获得额外的安全性,您还可以创建一个组,而不是 chowning 个人 ruby​​username,并将用户添加到该组。

您首先需要使用 sudo apt-get remove ruby.

之类的东西卸载 Ubuntu 安装的 ruby

然后根据他们的文档使用 rbenv and ruby-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 libxml2-dev libxslt1-dev libcurl4-openssl-dev 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

基于上述 derek 的回答,通常不建议使用系统提供的 Ruby 实例进行您自己的开发工作,因为系统工具可能取决于 [=18= 的特定版本或位置] 安装。类似于 this answer for Mac OSX, you will want to follow derek's instructions on using something like rbenv (RVM 是一个类似的替代方案)来安装您自己的 Ruby 实例。

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

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

德里克回答中的一行。

而不是改变所有者,这可能会锁定其他本地用户,或者 – 有一天 – 您自己的 ruby server/deployment-things... 运行 在不同的用户下...

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

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

(我也确实遇到了你的错误,所以这个比较靠谱。)

如果您想使用分配 Ruby 而不是 rb-env/rvm,您可以为当前用户设置一个 GEM_HOME。首先为你的用户创建一个目录来存储Rubygem:

$ mkdir ~/.ruby

然后更新您的 shell 以将该目录用于 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 一起使用。如果您使用的 shell 不是 Bash,那么您将需要为 shell 而不是 bashrc 编辑启动脚本。

(2019 年 1 月)要使用 Rbenv 脚本安装 Ruby,请按照以下步骤操作:

1.首先,更新包索引并安装所需的包 ruby-构建工具从源构建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/main/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

To list all available Ruby versions you can use: rbenv install -l

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

ruby -v

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

来源:How To Install Ruby on Ubuntu 18.04

编辑:安装ruby宝石:

sudo apt-get install rubygems

重新安装 Compass 对我有用..太神奇了!

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

我在 GitHub 操作中遇到了同样的错误。添加 sudo 解决了问题。

sudo gem install bundler

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 版本 (ruby-full) 并使用 snap

重新安装
sudo apt-get remove ruby
sudo snap install ruby --classic

您在安装捆绑器之前尝试过 运行 rbenv rehash 吗?

我 运行 使用 WSL2 运行 Ubuntu 20.04.

我通过 GitHub 安装了 rbenv 和 ruby-build 并继续安装 ruby 3.0.1 并将其设置为全球版本。

➜  ~ rbenv install 3.0.1
Downloading ruby-3.0.1.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.1.tar.gz
Installing ruby-3.0.1...
Installed ruby-3.0.1 to /home/kayla/.rbenv/versions/3.0.1
➜  ~ rbenv global 3.0.1
➜  ~ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
➜  ~ gem install bundler
Fetching bundler-2.2.20.gem
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /var/lib/gems/2.7.0 directory.

我的 ruby 安装在同一位置:

➜  ~ which ruby
/usr/bin/ruby

我没有完全重新安装 rbenv 和 ruby-build,而是在安装捆绑器之前重新哈希:

➜  ~ rbenv rehash
➜  ~ gem install bundler
Fetching bundler-2.2.20.gem
Successfully installed bundler-2.2.20
Parsing documentation for bundler-2.2.20
Installing ri documentation for bundler-2.2.20
Done installing documentation for bundler after 3 seconds
1 gem installed

之前可能已经暗示过这一点的一个线索是,在我重新哈希之前 ruby -v 的 return 值是 ruby 2.7.0,而不是 3.0.1。

使用 Ruby 的 snap 版本 解决了我的问题:

  • 删除默认版本: sudo apt-get remove ruby

  • 使用 snap 安装另一个: sudo snap install ruby --classic

  • 您现在可以运行gem install bundler