ruby gems под rvm в Ubuntu (не удалось) установить в неправильном месте - PullRequest
3 голосов
/ 02 сентября 2010

Я использую Ubuntu 10.04 и изначально установил ruby ​​1.9.1 (из источника). Я только что решил попробовать ruby ​​1.9.2 и rails 3, и мне показалось, что самое время использовать rvm для работы с несколькими установками ruby ​​и наборами гемов.

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 ​​пытается установить gems на /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.

Ответы [ 3 ]

7 голосов
/ 03 сентября 2010

После отслеживания возврата gem install -V --backtrace --debug haml (спасибо zzzhc) и более внимательного изучения каталога /home/mark/.gem я обнаружил, что там не было установлено никаких гемов, только файлы gemspec и исходные файлы гемов. В духе экспериментов я удалил /home/mark/.gem и снова запустил команду gem install, и вдруг она заработала. И что он воссоздает /home/mark/.gem, содержащий gemspecs для драгоценных камней, которые я только что установил.

Теперь ясно, что я неверно истолковал сообщение об ошибке в исходном вопросе; rubygems не потерпел неудачу при попытке установить gems на /home/mark/.gem, он просто использовал этот каталог как временное хранилище для gemspecs недавно загруженных gems, которые должны были быть установлены. Перед установкой rvm я устанавливал gems в систему, используя sudo gem install..., что позволило бы создать каталог /home/mark/.gem с правами root. Таким образом, rubygems run без sudo не смог получить доступ к временному каталогу для хранения gemspecs и прерывал работу до того, как смог установить gems. Doh!

1 голос
/ 27 апреля 2011

Другим способом является тип, который драгоценный камень после попадания в рубиновую версию. Вы получите что-то вроде этого - /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 работают нормально.

0 голосов
/ 02 сентября 2010

проверьте первую строку /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/

...