我在我的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.
任何帮助将不胜感激!
答案 0 :(得分:122)
首先需要使用sudo apt-get remove ruby
之类的东西卸载Ubuntu安装的ruby。
然后根据他们的文档使用rbenv和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 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
然后享受!
德里克
答案 1 :(得分:18)
如果要使用Ruby而不是rb-env / rvm,可以为当前用户设置GEM_HOME
。首先创建一个目录来存储您的用户的Ruby gem:
$ 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 gem。我能够在Ubuntu 18.04下使用Ruby 2.5.1。如果您使用的是非Bash的shell,则需要编辑该shell的启动脚本而不是bashrc
。
答案 2 :(得分:8)
尝试在chown -R
目录上使用var/lib/gems
,在此示例中为用户[rubyusername
]分配所有权,即将使用gem安装和开发的用户。
# chown -R rubyusername:rubyusername /var/lib/gems
递归会更改 gems 目录下的所有内容。为了在多用户系统上获得额外的安全性,您还可以创建一个组,而不是使用单个rubyusername,并将用户添加到该组。
答案 3 :(得分:8)
而不是更改所有者,这可能会锁定其他本地用户,或者 - 某天 - 您自己的ruby服务器/部署 - 在不同的用户下运行......
我宁愿简单地将该特定文件夹的权限扩展到......嗯,每个人:
cd /var/lib
sudo chmod -R a+w gems/
(我确实遇到了你的错误。所以这是相当经过验证的。)
答案 4 :(得分:6)
(2019年1月),要使用Rbenv脚本安装Ruby,请按照以下步骤操作:
1。首先,更新软件包索引并安装所需的软件包 用于从源代码构建Ruby的ruby-build工具:
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]
来源:How To Install Ruby on Ubuntu 18.04
编辑:安装rubygems:
sudo apt-get install rubygems
答案 5 :(得分:5)
Ubuntu 20.04:
对于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
卸载apt-version(ruby-full
),然后使用snap
sudo apt-get remove ruby
sudo snap install ruby --classic
答案 6 :(得分:3)
基于derek上面的答案,通常不建议将系统提供的Ruby实例用于您自己的开发工作,因为系统工具可能依赖于Ruby安装的特定版本或位置。与this answer for Mac OSX类似,您需要遵循derek关于使用类似rbenv(RVM是类似替代方法)的说明来安装您自己的Ruby实例。
但是,没有必要卸载Ruby的系统版本,rbenv安装说明提供了一种机制来确保shell中可用的Ruby实例是rbenv实例,而不是系统实例。这是
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
在德里克的回答中说道。
答案 7 :(得分:3)
我在GitHub Actions中遇到了相同的错误。添加sudo
解决了该问题。
sudo gem install bundler
答案 8 :(得分:1)
重新安装Compass对我有用。这真是神奇!
package com.muddco.fl04;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.OpenableColumns;
import android.util.Log;
import android.widget.Toast;
import com.muddco.fl04.R;
public class MainActivity extends AppCompatActivity {
static String TAG = "TEST123";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
openFile();
}
// Request code for selecting a PDF document.
private static final int PICK_FILE = 2;
private void openFile() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, PICK_FILE);
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
if (requestCode == PICK_FILE
&& resultCode == Activity.RESULT_OK) {
Uri uri = null;
if (resultData != null) {
uri = resultData.getData();
dumpImageMetaData(uri);
}
}
super.onActivityResult(requestCode,resultCode,resultData);
}
public void dumpImageMetaData(Uri uri) {
Cursor cursor = getApplicationContext().getContentResolver()
.query(uri, null, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
// Note it's called "Display Name". This is
// provider-specific, and might not necessarily be the file name.
String displayName = cursor.getString(
cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
Log.i(TAG, "Display Name: " + displayName);
int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
String size = null;
if (!cursor.isNull(sizeIndex)) {
size = cursor.getString(sizeIndex);
} else {
size = "Unknown";
}
Log.i(TAG, "Size: " + size);
Toast.makeText(this, "Display Name: " + displayName + " Size: " + size, Toast.LENGTH_LONG).show();
}
} finally {
cursor.close();
}
}
}
答案 9 :(得分:0)
对我来说,这个问题只是在此bash命令的前面简单添加 sudo 即可。
gem install rails -v 5.2.3
应该如此
sudo gem install rails -v 5.2.3
答案 10 :(得分:0)
您是否在安装 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.
我的 ruby 安装在同一个位置:
➜ ~ which ruby
/usr/bin/ruby
我不需要完全重新安装 rbenv 和 ruby-build,而是在安装 bundler 之前重新哈希:
➜ ~ 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。