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

der*_*rek 89 rubygems gem-bundler

我在我的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.
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

der*_*rek 139

首先需要卸载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
Run Code Online (Sandbox Code Playgroud)

最后一步是安装Bundler:

gem install bundler
rbenv rehash
Run Code Online (Sandbox Code Playgroud)

然后享受!

德里克

  • 有关如何安装ruby(在轨道上)的说明,请访问https://gorails.com/setup/ubuntu/16.04 (4认同)
  • 我有点沉默寡言,因为它也需要卸载依赖程序(例如`vim-gnome`).我想我首先想知道_why_它需要在`/ var/lib/...`中写一个用户安装...我不需要时做一个`sudo gem install`吗? (3认同)
  • 我同意@AntonSkovorodko,如果答案可以证明卸载Ruby是合理的,那就太好了 (2认同)
  • 在Cinnamon环境(在Linux Mint 18.2中发生)中卸载Ruby时要小心,重新启动后我无法以图形方式运行系统。当您遇到这种情况时,请通过Ctrl + Alt + F1转到CLI,然后运行以下命令(再次卸载并安装Cinnamon):`sudo apt purge肉桂&& sudo apt安装肉桂` (2认同)
  • 随着这个答案的老化,您可能想知道最新的可用版本是什么:`rbenv install -l` 列出所有可用版本,然后`rbenv install 2.5.1` 用于 2.5.1 版本或任何你想要的. (2认同)
  • `E:软件包'python-software-properties'没有安装候选者` (2认同)
  • 您可以将导出路径添加到“~/.profile”以适应其他 shell,或者如果您使用 zsh,像我一样将“~/.bashrc”更改为“~/.zshrc”或“~/.zprofile” 。 (2认同)

Jam*_*mes 40

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

$ mkdir ~/.ruby
Run Code Online (Sandbox Code Playgroud)

然后更新shell以使用该目录GEM_HOME并更新PATH变量以包含Ruby gem bin目录.

$ echo 'export GEM_HOME=~/.ruby/' >> ~/.bashrc
$ echo 'export PATH="$PATH:~/.ruby/bin"' >> ~/.bashrc
$ source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

(最后一行会将设置直接加载到当前shell中.)

现在,您应该能够使用该gem命令在您的用户下安装Ruby gem .我能够在Ubuntu 18.04下使用Ruby 2.5.1.如果您使用的是非Bash的shell,则需要编辑该shell的启动脚本而不是bashrc.

  • 这可能更适合不需要针对多个版本进行开发的 ruby​​ 用户。 (4认同)
  • 我这样做了,然后得到一个关于“找不到 ruby​​ 的头文件”的错误,然后我读到了这个:/sf/answers/315187071/ ,并没有遵循所有这些但确实做了sudo apt install ruby​​-gems,然后它对我有用。 (3认同)
  • 这在Ubuntu 18.04上对我有用 (2认同)
  • 我相信@robm 的意思是 ruby​​-dev 而不是 ruby​​-gems (2认同)

Ach*_*DAY 18

(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
Run Code Online (Sandbox Code Playgroud)

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

curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

rbenv install 2.5.1
rbenv global 2.5.1
Run Code Online (Sandbox Code Playgroud)

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

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

ruby -v

# Output
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Run Code Online (Sandbox Code Playgroud)

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

编辑:安装rubygems:

sudo apt-get install rubygems
Run Code Online (Sandbox Code Playgroud)

  • 这很棒!简洁明了。我完全遵循了它(除了我手工进行的.zshrc更改之外),它运行得很好。用与您添加如何安装`rubygems`相同的方式,我建议您也许添加如何稍后更新已安装的ruby版本(我猜您只是再次运行`rbenv install`和`rbenv global`命令,也许` rbenvuninstall`删除过时的版本) (2认同)

sch*_*rer 17

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
Run Code Online (Sandbox Code Playgroud)

选项 2 - 使用 snap

卸载 apt-version ( ruby-full) 并重新安装它snap

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)


Fra*_*cke 11

而不是更改可能会锁定其他本地用户的所有者,或者 - 某天 - 您自己的ruby服务器/部署 - 在不同用户下运行的东西......

我宁愿只是将该特定文件夹的权限扩展到......好吧,每个人:

cd /var/lib
sudo chmod -R a+w gems/
Run Code Online (Sandbox Code Playgroud)

(我确实遇到了你的错误.所以这是相当经过验证的.)

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

小智 8

尝试chown -Rvar/lib/gems目录上使用rubyusername,为此示例中的用户[ ] 分配所有权,即将使用gem安装和开发的用户.

 # chown -R rubyusername:rubyusername /var/lib/gems 
Run Code Online (Sandbox Code Playgroud)

这会以递归方式更改gems目录下的所有内容.为了在多用户系统上提供额外的安全性,您还可以创建一个组,而不是单独使用rubyusername,并将用户添加到该组.

  • 它可以解决这个问题,但另一个问题弹出:错误:在执行宝石...(GEM :: FilePermissionError)您没有用于/ usr/local/bin目录目录写权限; 所以我想别的东西是错误的,而不是许可. (2认同)

Kol*_*n N 8

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

sudo gem install bundler
Run Code Online (Sandbox Code Playgroud)

  • 您永远不应该使用“sudo”安装这些框架。 (3认同)