「sudo gem install」または「gem install」とgemの場所


140

sudo gem list --local」と「gem list --local」を実行すると、結果が異なります。私のgemパスはホームフォルダーに設定されており、 ' gem list --local'のgemのみが含まれています。

私のコンピューターの別のディレクトリにgemをインストールするのはよくないので、gemパスを別の方法で設定sudoする必要があります。何かをインストールするときは常に使用する必要がありますか?

my ~/.profile
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"

〜/ .bash_profileが空です。


1
これは、root権限を必要とするgemを使用する必要がある私たちにとっては有効な質問だと思います。
ケリー

関連:stackoverflow.com/questions/21141584/…。Rubyのバージョンを管理するためにrbenvを使用していて、のsudo gem install rails代わりに使用したため問題が発生しました gem install rails
Dennis

3
「これは、root権限を必要とするgemを使用しなければならない私たちにとって、有効な質問だと思います。」インストールまたは実行するためにroot権限を必要とするgemは非常に疑わしいと思います。Gemsはサンドボックスで実行でき、ユーザーの権限で実行できる必要があります。
Tin Man

1
sudo装填された銃があなたの足に向けられています。それが何をするか、それがシステムにどのように影響するかを理解せずにそれを使用することは、目を閉じてトリガーを引くようなものです。あなたはあなたの足に穴を撃つかもしれませんが、そうではないかもしれませんが、ダメージを元に戻す方法を知らない限り、リスクを冒したくないでしょう。sudoシステム所有のRubyへの書き込みを使用します。これはMac OS上で、Appleが自分の使用のためにインストールしたものです。私たちはそれに便乗することができますが、間違ったものを変更すると彼らのコードが壊れる可能性があります。そのため、ソースからインストールするか、他の方法を使用して、安全に調整できる場所にインストールします。
Tin Man

回答:


146

他のすべての投稿とは異なり、sudogemのインストール時には使用しないことをお勧めします。

代わりに、RVMをインストールして、ポータブルな宝石の家とRubyの異なるバージョンをすべて1つの屋根の下に置いて、幸せな生活を始めることをお勧めします。

初心者のために、ドキュメントから:

RVMはコマンドラインツールであり、複数のルビー環境とgemのセットを簡単にインストール、管理、操作できます。

宝石をインストールする理由sudoだけよりも悪いですgem install、それはのために宝石をインストールされるためであるALL USERSのようroot。これは、マシンを使用している唯一のユーザーであれば問題ないかもしれませんが、そうでない場合は奇妙な問題が発生する可能性があります。

すべての宝石を一掃してやり直したい場合は、非rootユーザーとして実行する方がはるかに簡単で安全です。

使用する場合RVM、使用sudoすることであらゆる種類の奇妙さが発生しますRVM。これは、インストールするRubyのバージョンごとに独自のGEM_HOMEがあるためです。

また、開発環境を本番環境にできる限り近づけることができれば便利です。本番環境では、root以外のユーザーとしてgemをインストールする可能性が高くなります。


12
RVMの提案では+1ですが、sudoを使用するだけの代替の可能性を混乱させる非難の場合は-1
tfwright

10
わかりましたが、sudoを使用することが特に有害なためではなく、「RVMが非常に優れているため」にすべての理由が要約されます。共有したくない特定の状況でのみ、あなたがやりたくないと思うでしょう。rvmを推奨したい場合は、それを実行してください。FUDDに頼る必要はありません。
tfwright 2010年

6
私はFUDを広めないようにし、RVM以外の理由を説明しようとしましたが、そのように思われた場合は謝罪します。
jonnii 2010年

9
RVMは適切なオプションです。しかし、あなたはより良いもの、RBENVを試すべきです。RVMよりも邪魔になりません。
Andres、

4
@HontváriJózsefLeventeコメントですべての質問に答えるのは難しいですが、それよりも短いのは、開発環境をできるだけ本番環境に近づけることです。2つのアプリで作業している場合、1つはRuby 2.1を使用し、もう1つはユーザー1.9を使用します。ローカル環境が正しいバージョンを使用していることを確認する必要があります。これは、RVMまたはRBENVが行うことです。サンドボックス環境を使用するのと同じ理由で使用しますが、この場合の主な利点は分離です。これが役に立てば幸いです!
jonnii

128

ローカル環境にgemをインストールすることもできます( sudo

gem install --user-install <gemname>

シングルユーザーのコンピューターであっても、システムレベルの構成を台無しにしないことをお勧めします。

でgempathsを確認することで、gemの場所を確認できgem environmentます。私の場合は「〜/ .gem / ruby​​ / 1.8」です。

パスに追加されたローカルインストールのバイナリが必要な場合は、次のようにbashrcに何かを追加できます。

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -r rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

http://guides.rubygems.org/faqs/#user-installから)


23
上記の「Yet Another Configuration Tool」ソリューションではなく、このオプションの+ 1、RBENV / RVM。
jjpe 2014

私は宝石を作成していて、私がしなければならないマニュアルに従ってrake install、sudo isseを修正するために、手動でそこに/Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rb追加をパッチする必要が--user-installありました。はrake install追加のパラメーターを受け入れないように見えるため、より良い解決策を見つけることができません。
Nakilon、2015年

私はその最初のコマンドに絶対に興奮しています。私はgemをインストールしようとしていて、sudo権限を持っていないために問題が発生しています。そのコマンドは機能しました!!!!
Caleb Kleveter、2015

34

さらに良いのは、--user-install毎回入力する必要がないように〜/ .gemrcファイルを追加することです。

gem: --user-install

13

もしあなたが

  • sudoでRuby gemをインストール
  • sudoなしでgemをインストールしたい
  • rvm / rbenvをインストールしたくない

以下をあなたのに追加してください.bash_profile

export GEM_HOME=/Users/your_user›/.gem
export PATH="$GEM_HOME/bin:$PATH"

ターミナルで新しいタブを開くか、準備完了source ~/.bash_profileです。


8
Ruby、Rails、Rakeなど、Ruby開発者が使用している/使用したくない人にとって、このソリューションはrvmを使用するよりもはるかに簡単です。私は本当にrubyのバージョンが異なっていても気にしません。gemとして配布されているいくつかのシェルプログラムを実行したいだけです。ありがとうございました!
Kevin Gimbel

9

関連(バンドルユーザーの場合)、ユーザー固有の既知のディレクトリにすべてを配置するRVMの軽量な代替手段が必要な場合は、次の使用をお勧めします。

bundle install --path $HOME/.gem

あなたが同じ場所に宝石をインストールしたい場合

gem install --user-install GEMNAME

それらを.gem/ruby/RUBYVERSIONホームディレクトリにインストールします。(この質問についての他のコメントを参照してください--user-install。)

これgem listによりgem uninstallsudoアクセスを必要とせずに、gemがに表示され、などを介してアンインストールできます。gemまたはbundlerによってインストールされた実行可能なスクリプトは、以下を追加することによってパスに入れることができます

$HOME/.gem/ruby/RUBYVERSION/bin

あなたに$PATHgem設定しても設定されていない場合は、それ自体がこのことを通知しますgem install --user-install


これをありがとう。デフォルトでこれをバンドラーに行わせることは可能ですか?(もしそうなら、それは良い考えでしょうか?)
joshtch

6
sudo gem install --no-user-install <gem-name>

gemをグローバルにインストールします。つまり、すべてのユーザーのコンテキストで使用できます。


1
また、OSが特定のバージョンに設定されることが予想されるベンダーがインストールしたgemを上書きすることもできます。そして、それはそれに依存するコードを壊す可能性があります。
Tin Man

1
...またはベンダーが提供しないgemをインストールし、システム上のすべてのユーザーが利用できるようにすることができます。読者がすべてのユーザーがgemの特定のバージョンを実際に利用できるようにたいと思っているdev v / sa sysadminであると仮定すると、すべての回答がどこにでもあることは少し悪化します。:D
dannysauer

1

以下を使用して、Railsアプリの特定のフォルダー(例:vendor /)にgemをインストールできます。

bundle install --path vendor

この。最近、ソフトウェアをインストールするためにsudoを必要とする唯一のプログラムはパッケージマネージャーです。
tjbp 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.