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

我在 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.
176970 次浏览

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

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

这个 递归更改 宝石目录下的所有内容。为了在多用户系统上获得额外的安全性,您还可以创建一个组,而不是选择单独的 rubyusername,然后将用户添加到该组中。

首先需要卸载 Ubuntu 安装的 Ruby,比如 sudo apt-get remove ruby

然后使用 Rbenv红宝石建筑根据他们的文档重新安装 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 实例进行自己的开发工作,因为系统工具可能依赖于 Ruby 安装的特定版本或位置。与 Mac OSX 的答案类似,您可能希望按照 Derek 的说明使用 rbenv (RVM是一个类似的替代品)来安装自己的 Ruby 实例。

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

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

德里克的回答中的一行。

而不是改变所有者,这可能会锁定其他本地用户,或-有一天-您自己的 Ruby 服务器/部署-事情... 运行在不同的用户..。

我更愿意简单地把那个文件夹的权限扩展到... 好吧,每个人:

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

(我也遇到了你的错误,所以这是经过验证的。)

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

$ 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下使用 Ruby2.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

接下来,运行以下 curl 命令来安装 rbenv 和 红宝石建造:

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

要列出所有可用的 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

编辑: 安装红宝石:

sudo apt-get install rubygems

重新安装指南针对我起作用了. . 这是一个魔术!

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

我在 GitHub Actions 中遇到了同样的错误,添加 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-version (ruby-full)并用 snap重新安装它

sudo apt-get remove ruby
sudo snap install ruby --classic

在安装 bundler 之前,您是否尝试过运行 rbenv rehash

我在运行 Ubuntu 20.04的 WSL2中遇到了这个问题。

我通过 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.

我的红宝石被安装在同一个位置:

➜  ~ which ruby
/usr/bin/ruby

我所需要做的不是重新安装 rbenv 和 ruby-build,而是在安装 bundler 之前进行 rehash:

➜  ~ 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的返回值是 ruby 2.7.0,而不是3.0.1。

使用 Ruby 的 快照版本为我解决了这个问题:

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

  • 使用管理单元安装另一个管理单元: sudo snap install ruby --classic

  • 现在可以运行 gem install bundler

对于 Fish Shell 用户:

设置环境变量

~/.config/fish/config.fish中输入:

set -gx PATH $HOME/.rbenv/bin $PATH
set -gx PATH $HOME/.rbenv/plugins/ruby-build/bin $PATH

这些是相当于以下的 fish 命令:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc

初始化 rbevn函数

同样在你的 ~/.config/fish/config.fish中写道:

rbenv init - | source

这条鱼相当于

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

提供您的配置

source ~/.config/fish/config.fish

你应该安装 Brew

curl -fsSL -o install.sh https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh
/bin/bash install.sh
brew install chruby ruby-install
brew install cocoapods
brew upgrade cocoapods

需要使用 Xcode 命令行工具,如果没有安装,请运行以下命令: sudo xcode-select --install