Railsアプリをインストールしようとしていますが、bundle
を使用するたびにSudo
がなければ失敗します。現在の状況では、使用中はすべて機能しますRailsを含むeverythingのSudo
。これは正しいとは思わない。
例えば:
$ 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
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を起動するたびにカスタムを追加します。
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)
これは、Rubyのインストール方法が原因です。
率直に言って、Sudoを気にしないのであれば、*うまく*動作します。結局のところ、それは単なるラップトップです...銀行で実行されているサーバーはありません。
本当に気にするなら、必要に応じてgemフォルダをchownします。
今日これが起こった。これは独特の状況かもしれませんが、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 install
がSudo
なしで再び機能します。
私は同じ問題を抱えていましたが、新しいgemsをインストールする前にBundlerが$ GEM_HOME/build_infoで見つかったすべてのファイルに対する書き込み許可を持っているかどうかを確認しました。私の場合、バンドラーを実行するユーザーは「rvm」ユーザーグループに属し、そのグループはそれらすべてのファイルを所有していましたが、グループはそれらの一部を書き込むことが許可されていなかったため、そうしませんでした。
これは、他の人が持っているrvmが期待するumask 0002の代わりに、umask 0022(rootによって作成されたすべてのファイルはグループによって書き込むことはできません)を持ついくつかのgemをルートの下にインストールしたために起こりました。
RVMを使用している場合は、次の2つの手順を実行してください。
ユーザーがRVMグループに属していることを確認してください
Sudo usermod -a -G rvm myUserName
Build_infoがRVMグループのすべてのユーザーに対して書き込み可能であることを確認してください
Sudo chmod 664 $GEM_HOME/build_info/*