web-dev-qa-db-ja.com

Bundlerはsudoなしではgemをインストールできません

Railsアプリをインストールしようとしていますが、bundleを使用するたびにSudoがなければ失敗します。現在の状況では、使用中はすべて機能しますRailsを含むeverythingSudo。これは正しいとは思わない。

例えば:

$ bundle update
Updating git://github.com/refinery/refinerycms.git
Fetching gem metadata from https://rubygems.org/.......
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Enter your password to install the bundled RubyGems to your system: 
Using rake (10.0.4) 
Using i18n (0.6.1) 
Using multi_json (1.7.2) 
Using rack-cache (1.2) 
Using rack-test (0.6.2) 
Installing hike (1.2.2) 
Errno::EACCES: Permission denied - /usr/local/rvm/gems/Ruby-1.9.3-p194/build_info/hike-1.2.2.info
An error occurred while installing hike (1.2.2), and Bundler cannot continue.
Make sure that `gem install hike -v '1.2.2'` succeeds before bundling.

しかし、それから私はそれが言うことをし、それは動作します:

$ gem install hike -v '1.2.2' 
Successfully installed hike-1.2.2
Parsing documentation for hike-1.2.2
Installing ri documentation for hike-1.2.2
Done installing documentation for hike after 0 seconds
1 gem installed

このパターンは、さまざまな宝石に対して何度も繰り返されます。わかりません。なぜこうなった? Sudoを使用すると、バンドルはこのエラーなしで更新されます。しかし、現在の状況では、rake...Rails serverなど、すべてにSudoが必要です。何かがおかしいです。

その他の詳細:OSX 10.8.3を使用しています...

$ Ruby -v
Ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0]
$ gem -v
2.0.3
$ rvm -v
rvm 1.19.6 (stable) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/]

$ which Ruby
/usr/local/rvm/rubies/Ruby-1.9.3-p194/bin/Ruby
$ which gem
/usr/local/rvm/rubies/Ruby-1.9.3-p194/bin/gem
$ which rvm
/usr/local/rvm/bin/rvm

更新

Sudo bundle installをエラーなしで実行できることは有益かもしれません。その後、bundle installが上記のようなエラーで失敗した直後。どうしてこれなの?

pdate2

/usr/local/rvm[master]$ ls -l
total 56
-rw-rw-r--   1 root  rvm   566 May  4 12:59 LICENCE
-rw-rw-r--   1 root  rvm  8929 May  4 12:59 README
-rw-rw-r--   1 root  rvm     7 May  4 12:59 RELEASE
-rw-rw-r--   1 root  rvm     7 May  4 12:59 VERSION
drwxrwsr-x   3 root  rvm   102 May  4 01:34 archives
drwxrwsr-x  35 root  rvm  1190 May  4 12:59 bin
drwxrwsr-x  11 root  rvm   374 May  4 12:59 config
drwxrwsr-x   6 root  rvm   204 Jan 10 19:55 contrib
drwxrwsr-x   5 root  rvm   170 Jan 10 19:55 environments
drwxrwsr-x   3 root  rvm   102 Jan 10 19:55 examples
drwxrwsr-x   5 root  rvm   170 Jan 10 19:52 gems
drwxrwxr-x   6 ESL   rvm   204 May  4 12:59 gemsets
drwxrwsr-x  92 root  rvm  3128 May  4 01:34 help
drwxrwsr-x  11 root  rvm   374 May  4 01:34 hooks
-rw-rw-r--   1 root  rvm    11 May  4 12:59 installed.at
drwxrwsr-x   4 root  rvm   136 Jan 10 19:54 lib
drwxrwsr-x   5 root  rvm   170 May  4 12:55 log
drwxrwsr-x   2 root  rvm    68 Jan 10 19:52 man
drwxrwsr-x   9 root  rvm   306 Jan 10 19:52 patches
drwxrwxr-x   4 ESL   rvm   136 May  4 12:59 patchsets
drwxrwsr-x   4 root  rvm   136 Jan 10 19:55 rubies
drwxrwsr-x  64 root  rvm  2176 May  4 01:34 scripts
drwxrwsr-x   3 root  rvm   102 May  4 01:34 src
drwxrwsr-x   2 root  rvm    68 Jan 10 19:52 tmp
drwxrwsr-x   8 root  rvm   272 May  4 12:59 user
drwxrwsr-x   4 root  rvm   136 Jan 10 19:52 usr
drwxrwsr-x   5 root  rvm   170 Jan 10 19:55 wrappers
34
emersonthis

Root権限を必要としないユーザーホームフォルダーでgemをホストできます。

bundle install --path ~/.gem

このパラメーターを手動で渡さないようにするには、export GEM_HOME=$HOME/.gemあなたの.bash_profile-これは、Mac OSおよびその他の* nixシステムでのSudoの問題を解決します。また、実行可能ファイル(バンドラーなど)を提供するgemへのアクセスが必要になる場合があるため、これも追加します。

PATH=$PATH:$HOME/.gem/bin

または場合によっては:

PATH=$PATH:$HOME/.gem/Ruby/<version>/bin

参照: https://stackoverflow.com/a/5862327/32202


UPD:ただし、この環境変数が同じであるrbenvを使用し始めると、異なるバージョンのRubyを使用する場合に問題が発生する可能性があるため、一時的にunset GEM_HOMEまたはrbenv-ed Rubyを起動するたびにカスタムを追加します。

53
Nakilon

RVM gemディレクトリは、rvmグループが所有する必要があります。したがって、所有権を変更する代わりに、単にユーザーをrvmグループに追加するのが賢明かもしれません。

# $(whoami) evaluates to your username
# You may want to change this to a different username depending on your config
# but $(whoami) is a passable default
usermod -a -G rvm $(whoami)
18
Matthew Clark

これは、Rubyのインストール方法が原因です。

率直に言って、Sudoを気にしないのであれば、*うまく*動作します。結局のところ、それは単なるラップトップです...銀行で実行されているサーバーはありません。

本当に気にするなら、必要に応じてgemフォルダをchownします。

7

今日これが起こった。これは独特の状況かもしれませんが、RVMがグローバルにインストールされたシステム(/usr/local/rvmでシステム全体)からRailsソースツリーを、RVMがインストールされたばかりのシステムにコピーしました-user(~/.rvm)。

bundle installを実行しようとして、「あなたのユーザーアカウントはシステムRubygemsにインストールできません。」エラー。いろいろ調べてみると、~/.rvmディレクトリにシンボリックリンクがあることに気付きました。

~/.rvm/gems/Ruby-2.1.1/cache -> /usr/local/rvm/gems/cache

そのシンボリックリンクを削除すると、bundle installSudoなしで再び機能します。

2
bjnord

私は同じ問題を抱えていましたが、新しいgemsをインストールする前にBundlerが$ GEM_HOME/build_infoで見つかったすべてのファイルに対する書き込み許可を持っているかどうかを確認しました。私の場合、バンドラーを実行するユーザーは「rvm」ユーザーグループに属し、そのグループはそれらすべてのファイルを所有していましたが、グループはそれらの一部を書き込むことが許可されていなかったため、そうしませんでした。

これは、他の人が持っているrvmが期待するumask 0002の代わりに、umask 0022(rootによって作成されたすべてのファイルはグループによって書き込むことはできません)を持ついくつかのgemをルートの下にインストールしたために起こりました。

1
snovity

RVMを使用している場合は、次の2つの手順を実行してください。

  1. ユーザーがRVMグループに属していることを確認してください

    Sudo usermod -a -G rvm myUserName

  2. Build_infoがRVMグループのすべてのユーザーに対して書き込み可能であることを確認してください

    Sudo chmod 664 $GEM_HOME/build_info/*

0
Darren Hicks