Ruby Gems под RVM на Ubuntu (не в состоянии) установить в неправильном месте
Вопрос
Я работаю Ubuntu 10.04 и изначально установил Ruby 1.9.1 (от источника). Я только что решил попробовать Ruby 1.9.2 и Rails 3, и казалось хорошим временем, чтобы использовать RVM, чтобы иметь дело с множественными установками Ruby и Cemsets.
RVM установлен и, кажется, работает, я установил Ruby 1.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
Файл в любом месте моей системы, которая может содержать конфликтующие настройки пути.
Так что я думаю, что мой вопрос, это то, что может вызвать Rubygems, чтобы попытаться установить /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
и перебежал gem install
Команда и вдруг она работала. И что он воссоздал /home/mark/.gem
содержащие Gemspecs для драгоценных камней, я только что установил.
Теперь ясно, что я неверно истолковал сообщение об ошибке в оригинальном вопросе; Rubygems не потерпел неудачу, пытаясь установить драгоценные камни на /home/mark/.gem
, это просто использовало этот каталог как временный магазин для Gemspecs вновь загруженных драгоценных камней. Перед установкой RVM я устанавливаю драгоценные камни на систему, используя sudo gem install...
который бы создал бы /home/mark/.gem
каталог с корневыми разрешениями. Так rubygems
бежать без sudo
Не удалось получить доступ к каталогу TEMP для хранения Gemspecs In и был прерывается до того, как он мог бы установить драгоценные камни. Дох!
Другие советы
Другой способ - это тип, который GEM после попадания в рубиновую версию. Вы получите что-то вроде этого - /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/