/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をインストールして2.3.3のようなルビーの新しいバージョンをインストールしようとすることができます
Anton Skovorodko

コメント3の場合:パッケージ「python-software-properties」は利用できません
。software

1
RVMオプション、および純粋な「ユーザーインストール」としての imhoさらに優れた&シンプルなインストール(グローバルで権利を要求するものとは対照的)は、権利をいじるよりもはるかに優れているかもしれません。
Frank Nocke

8
このストリームで、このOPにこの問題が発生した理由と、Rubyとマルチインストールマネージャー(RVMまたはRBEVN)の両方を優先してRubyのバージョンを破棄する理由を説明したいと思います。ここでのアドバイスが個人的な好みのみに基づいているかどうかは、はっきりとは言えません。このアドバイスの裏にもっとあるといいのですが。
BaldEagle

回答:


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
ruby(レール上)のインストール方法はこちらgorails.com/setup/ubuntu/16.04
Andrzej Rehmann

5
vim-gnomeたとえば)依存するプログラムもアンインストールする必要があるので、私はアンインストールをするのに少し抵抗しています。そもそもなぜ/var/lib/...ユーザーインストールのために書き込む必要があるのを知りたいと思うのですが... sudo gem install不要なときにを実行しましたか?
PlasmaBinturong 2016年

4
@AntonSkovorodkoに同意します。答えがRubyのアンインストールを正当化できるとよいのですが
blong

4
シナモン環境でRubyをアンインストールするときは注意してください(Linux Mint 18.2で起こった)、再起動後、グラフィックモードでシステムを実行できませんでした。これがあなたに起こると、を経由してCLIにに行くCtrl+Alt+F1とコマンド(アンインストールし、再度、シナモンをインストールする)以下のコマンドを実行します。 sudo apt purge cinnamon && sudo apt install cinnamon
Koutを

2
この回答が古くなると、おそらく最新のものが入手可能かどうかを知りたいでしょう:rbenv install -l利用可能なすべてのバージョンのリスト、次にrbenv install 2.5.12.5.1バージョンまたは好きなもののリスト。
Paul Sturm

60

rb-env / rvmの代わりにディストリビューションRubyを使用する場合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

(その最後の行は、現在のシェルの環境変数をリロードします。)

これで、gemコマンドを使用して、ユーザーの下にRuby gemをインストールできるようになります。Ubuntu 18.04でRuby 2.5.1を使用してこれを動作させることができました。Bash以外のシェルを使用している場合は、ではなく、そのシェルの起動スクリプトを編集する必要がありますbashrc


2
私はこれをしなかった、そして、「ルビーのためのヘッダファイルを見つけることができません」というエラーを得た後、私は、この読み取り:stackoverflow.com/a/4502672/2245874を、そしてそれのすべてに従っていませんでしたが、ルビーの須藤はaptインストールしたんです-gems、そしてそれは私のために働いた。
robm

1
@robmはruby-gemsではなくruby-devを意味していたと思います
Altreus

3
これは、複数のバージョンに対して開発する必要のないRubyユーザーにはおそらくより適切です。
danielcooperxyz

1
あなたは追加のツールなしで私のルビーのインストールを修正する本当に良いLinuxの方法を説明しました、ただ古き良きbash :)
Denis

30

(2019年1月)Rbenvスクリプトを使用してRubyをインストールするには、次の手順に従います。

1.まず、パッケージインデックスを更新し、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 installand rbenv 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フォルダーをアドレス指定する必要もありましたが、この解決策は機能しました。 」
eb80

10

ディレクトリを使用chown -Rして、この例ではユーザーvar/lib/gems[ rubyusername]に所有権を割り当てます。このユーザーは、gemsを使用してインストールおよび開発します。

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

これにより、gemsディレクトリの下のすべてが再帰的に変更されます。マルチユーザーシステムのセキュリティを強化するために、個々のrubyusernameを変更するのではなく、グループを作成して、そのグループにユーザーを追加することもできます。


2
それはその問題を解決できますが、別の問題がポップアップします:エラー:gemの実行中...(Gem :: FilePermissionError)/ usr / local / binディレクトリへの書き込み権限がありません。許可の代わりに何か他のことが間違っていると思います。
derek、

3

上記のderekの回答に基づいて、システムツールはRubyのインストールの特定のバージョンまたは場所に依存する可能性があるため、システム提供のRubyインスタンスを独自の開発作業に使用することは一般に推奨されません。Mac OSXに対するこの回答と同様に rbenv(RVMも同様の代替手段)などを使用して独自のRubyインスタンスをインストールするください。

ただし、Rubyのシステムバージョンをアンインストールする必要はありません。rbenvインストール手順では、シェルで使用できるRubyのインスタンスがシステムインスタンスではなくrbenvインスタンスであることを確認するためのメカニズムを提供します。これは

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

デレクの答えの行。


2

GitHubアクションで同じエラーが発生しました。追加するとsudo問題は解決しました。

sudo gem install bundler

0

コンパスの再インストールは私にとってはうまくいきました。それは魔法です!

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.