UbuntuのRVMの下のRuby Gems(失敗しない)間違った場所にインストール
質問
Ubuntu 10.04を実行していて、元々Ruby 1.9.1(ソースから)をインストールしています。 Ruby 1.9.2とRails 3を試してみることにしたばかりで、RVMを使用して複数のRubyインストールとジェムセットを扱うのに良い時期のように思えました。
RVMがインストールされて動作しているようです。RVY1.9.2をRVMにインストールし、デフォルトのRubyを作成しました。ただし、Ruby 1.9.2の下に宝石をインストールしようとするたびに、このエラーが表示されます。
mark@Steve-Austins-Penguin:~$ gem install haml
ERROR: While executing gem ... (Errno::EACCES)
Permission denied - /home/mark/.gem/specs
gem environment
戻り値:
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.7
- RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/mark/.rvm/gems/ruby-1.9.2-p0
- RUBY EXECUTABLE: /home/mark/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
- EXECUTABLE DIRECTORY: /home/mark/.rvm/gems/ruby-1.9.2-p0/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /home/mark/.rvm/gems/ruby-1.9.2-p0
- /home/mark/.rvm/gems/ruby-1.9.2-p0@global
<snip>
しかし、正しいインストール、RubyとGemのパスがここに表示されている場合、Rubyが宝石をインストールしようとしているのはなぜですか /home/mark/.gem
?によって示されるすべての変数とパス env
正しく見て、私は見つかりません .gemrc
競合するパス設定を含む可能性のある私のシステム上のどこにでもファイルします。
だから私の質問は、Rubyemsにインストールを試みるのは何ですか /home/mark/.gems
RVMによって設定された正しいパスの代わりに?
以下の質問への回答:
mark@Steve-Austins-Penguin:~$ echo $PATH
/home/mark/.rvm/gems/ruby-1.9.2-p0/bin:/home/mark/.rvm/gems/ruby-1.9.2-p0@global/bin:/home/mark/.rvm/rubies/ruby-1.9.2-p0/bin:/home/mark/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
mark@Steve-Austins-Penguin:~$ which gem
/home/mark/.rvm/rubies/ruby-1.9.2-p0/bin/gem
mark@Steve-Austins-Penguin:~$ rvm list
rvm rubies
ruby-1.8.7-p302 [ x86_64 ]
=> ruby-1.9.2-p0 [ x86_64 ]
mark@Steve-Austins-Penguin:~$ env
rvm_gemsets_path=/home/mark/.rvm/gemsets
MANPATH=:/home/mark/.rvm/man
rvm_scripts_path=/home/mark/.rvm/scripts
rvm_bin_path=/home/mark/.rvm/bin
GEM_HOME=/home/mark/.rvm/gems/ruby-1.9.2-p0
rvm_patchsets_path=/home/mark/.rvm/patchsets
SHELL=/bin/bash
IRBRC=/home/mark/.rvm/rubies/ruby-1.9.2-p0/.irbrc
rvm_patches_path=/home/mark/.rvm/patches
MY_RUBY_HOME=/home/mark/.rvm/rubies/ruby-1.9.2-p0
rvm_selfcontained=1
USER=mark
__shell_array_start=0
rvm_gems_cache_path=/home/mark/.rvm/gems/cache
rvm_config_path=/home/mark/.rvm/config
rvm_path=/home/mark/.rvm
USERNAME=mark
rvm_gemset_separator=@
rvm_ruby_args=
rvm_rubies_path=/home/mark/.rvm/rubies
PWD=/home/mark
rvm_hooks_path=/home/mark/.rvm/hooks
rvm_version=1.0.1
rvm_src_path=/home/mark/.rvm/src
HOME=/home/mark
rvm_gems_path=/home/mark/.rvm/gems
rvm_ruby_string=ruby-1.9.2-p0
BUNDLE_PATH=/home/mark/.rvm/gems/ruby-1.9.2-p0
rvm_tmp_path=/home/mark/.rvm/tmp
LOGNAME=mark
GEM_PATH=/home/mark/.rvm/gems/ruby-1.9.2-p0:/home/mark/.rvm/gems/ruby-1.9.2-p0@global
rvm_action=list
rvm_log_path=/home/mark/.rvm/log
rvm_interactive=1
RUBY_VERSION=ruby-1.9.2-p0
rvm_archives_path=/home/mark/.rvm/archives
rvm_repo_path=/home/mark/.rvm/repos
_=/usr/bin/env
からの応答を編集したことに注意してください env
わずかに - 単にこの投稿のサイズを制御下に保つために - x、gnome、およびsshに関連するすべてのエントリを削除することにより。
解決
ランニングからバックトレースをフォローアップします gem install -V --backtrace --debug haml
(Zzzhcに感謝します)そして、 /home/mark/.gem
ディレクトリ私は、そこに宝石がインストールされていないことを発見しました。GEMSPECファイルとGEMソースファイルだけです。実験の精神で私は削除しました /home/mark/.gem
そしてreを実行しました gem install
コマンドと突然それは機能していました。そして、それが再現したこと /home/mark/.gem
インストールしたばかりの宝石用のgemspecsが含まれています。
元の質問でエラーメッセージを誤解したことは明らかです。 Rubygemsは、宝石をインストールしようとしている間は失敗しませんでした /home/mark/.gem
, 、それは単にそのディレクトリを、新しくダウンロードされた宝石のgemspecsがインストールされようとしている一時的なストアとして使用していました。 RVMをインストールする前に、私はシステムに宝石をインストールしていました sudo gem install...
それが作成されたでしょう /home/mark/.gem
ルートアクセス許可を備えたディレクトリ。そう rubygems
なしで実行します sudo
GEMSPECSを保存するためにTempディレクトリにアクセスすることができず、GEMSをインストールする前に中止していました。ああ!
他のヒント
別の方法は、Rubyバージョンに入った後に宝石があるタイプです。あなたはこのようなものを手に入れます - /home/username/.rvm/rubies/ruby-1.9.2-p180/bin/gem
. 。今すぐ入力してください sudo /home/username/.rvm/rubies/ruby-1.9.2-p180/bin/gem install gem_name
.
完全なパスを指定し、sudoを追加すると正常に動作します。
の最初の行を確認します /home/mark/.rvm/rubies/ruby-1.9.2-p0/bin/gem
そして、見てください http://yehudakatz.com/2010/08/24/a-tale-of-abort-traps-or-always-question-your-assumptions/