2010-07-08 10 views
4

Я пытаюсь установить рубиновый камень под названием activeldap, однако он не позволит мне его установить. Я продолжаю получать всевозможные ошибки, включая ошибку Errno :: EEXIST. Я добавил информацию об ошибке ниже. Есть идеи?Ruby: Что означает Errno :: EEXIST при установке драгоценного камня?

C:\Ruby\www\demo>gem install activeldap 
ERROR: While executing gem ... (Errno::EEXIST) 
File exists - C: 

C:\Ruby\www\demo>gem install activeldap --debug -V 
Exception `NameError' at C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:164 - uninitialized constant Gem::Commands::InstallCommand 
Exception `NoMethodError' at C:/Ruby187/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational 
Exception `Gem::LoadError' at C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems.rb:779 - Could not find RubyGem test-unit (>= 0) 

Exception `Gem::LoadError' at C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems.rb:779 - Could not find RubyGem sources (> 0.0.1) 

GET http://rubygems.org/latest_specs.4.8.gz 
302 Found 
GET http://production.s3.rubygems.org/latest_specs.4.8.gz 
200 OK 
Exception `Errno::EEXIST' at C:/Ruby187/lib/ruby/1.8/fileutils.rb:243 - File exists - C:/Users/ktemplar/.gem/specs/rubygems.org%80 
GET http://rubygems.org/specs.4.8.gz 
302 Found 
GET http://production.s3.rubygems.org/specs.4.8.gz 
304 Not Modified 
Installing gem locale-2.0.5 
Exception `IOError' at C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/format.rb:50 - closed stream 
Exception `Errno::EEXIST' at C:/Ruby187/lib/ruby/1.8/fileutils.rb:243 - File exists - C:/Ruby187/lib/ruby/gems/1.8 
Exception `Errno::EEXIST' at C:/Ruby187/lib/ruby/1.8/fileutils.rb:243 - File exists - C:/Ruby187/lib/ruby/gems/1.8/gems/locale-2.0.5 
Exception `Errno::EEXIST' at C:/Ruby187/lib/ruby/1.8/fileutils.rb:243 - File exists - C:/Ruby187/lib/ruby/gems/1.8/gems/locale-2.0.5/lib 
C:/Ruby187/lib/ruby/gems/1.8/gems/locale-2.0.5/lib/locale.rb 
Exception `Errno::ENOENT' at C:/Ruby187/lib/ruby/1.8/fileutils.rb:243 - No such file or directory - C:/Ruby187/lib/ruby/gems/1.8/gems/locale-2.0.5/lib/locale/tag 
Exception `Errno::EEXIST' at C:/Ruby187/lib/ruby/1.8/fileutils.rb:243 - File exists - C: 
Exception `Errno::EEXIST' at C:/Ruby187/lib/ruby/1.8/fileutils.rb:219 - File exists - C: 
ERROR: While executing gem ... (Errno::EEXIST) 
    File exists - C: 
     C:/Ruby187/lib/ruby/1.8/fileutils.rb:243:in `mkdir' 
     C:/Ruby187/lib/ruby/1.8/fileutils.rb:243:in `fu_mkdir' 
     C:/Ruby187/lib/ruby/1.8/fileutils.rb:217:in `mkdir_p' 
     C:/Ruby187/lib/ruby/1.8/fileutils.rb:215:in `reverse_each' 
     C:/Ruby187/lib/ruby/1.8/fileutils.rb:215:in `mkdir_p' 
     C:/Ruby187/lib/ruby/1.8/fileutils.rb:201:in `each' 
     C:/Ruby187/lib/ruby/1.8/fileutils.rb:201:in `mkdir_p' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/installer.rb:517:in `extract_files' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/installer.rb:500:in `each' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/installer.rb:500:in `extract_files' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/installer.rb:196:in `install' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:277:in `install' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:247:in `each' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:247:in `install' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:119:in `execute' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:116:in `each' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:116:in `execute' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/command.rb:270:in `invoke' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:134:in `process_args' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:104:in `run' 
     C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:58:in `run' 
     C:/Ruby187/bin/gem:21 
+0

Have вы установили Cygwin случайно? –

ответ

12

Update 13 июля 2010

Весьма вероятно, что эта проблема вызвана установкой E Text Editor на Windows 7. Для того, чтобы обеспечить совместимость с TextMate на Windows, E автоматически устанавливает Cygwin. Во время установки запускается скрипт bash, который пытается изменить разрешения на C :. Вот линия:

chmod o-w `cygpath $HOMEDRIVE` 

Очевидно, когда Cygwin устанавливает разрешения, он делает беспорядок разрешений для Windows ACL . Чтобы защитить целостность системного корневого диска, Windows UAC делает что-то известное как виртуализация или перенаправление данных. More info here. В нашем случае вместо того, чтобы испортить права на реальный корневой каталог, виртуализация запускает и нарушает права доступа к каталогу VirtualStore (% localappdata% \ VirtualStore), делая его root недоступным (хотя любые каталоги внутри остаются нетронутыми и доступными). Когда Ruby устанавливает драгоценные камни, он пытается получить доступ к корневому каталогу C: \, который UAC запрещает, поэтому он пытается получить доступ к% localappdata% \ VirtualStore, который он не может, если у вас есть поврежденные разрешения, таким образом вы получаете отказ.

Вы можете исправить это, удалив неправильные разрешения из VirtualStore (вам нужно будет отобразить защищенные системные файлы в Проводнике, чтобы увидеть VirtualStore). Правильные разрешения должны наследовать от родительской папки и должны быть:

SYSTEM     (full control) 
*your users*    (full control) 
Administrators   (full control) 

Вот суть сравнения нарушенных прав против правильных разрешений:

http://gist.github.com/471087

Автор E знает об этой проблеме и работа над исправлением.


Это кажется странным разрешение ошибка, по-видимому, только происходит в Windows, 7. Попробуйте открыть командную строку с повышенной и установкой оттуда. Вот что я получаю, когда повышен:

[C:\Users\charlesr]gem install activeldap 
Successfully installed activeldap-1.2.2 
1 gem installed 
Installing ri documentation for activeldap-1.2.2... 
Installing RDoc documentation for activeldap-1.2.2... 

Если я бегу из стандартной командной строки, я получаю это:

[C:\Users\charlesr]gem install activeldap 
ERROR: While executing gem ... (Errno::EEXIST) 
File exists - C: 

Я буду обновлять этот ответ, если лучшее решение приходит к свету. Никогда не требовалось повышать при установке драгоценных камней в Windows, и поэтому поведение, которое мы видим здесь, неверно.

Существует обсуждение связанных с этим вопросом здесь: http://groups.google.com/group/rubyinstaller/browse_thread/thread/df7b7c217ad7d882

+0

Это исправило это. Я просто запускал командную строку как администратор и исправил эту проблему. Спасибо, Чарльз! – Graham

+0

@Graham - Вы установили E Text Editor в какой-то момент? –

+0

Большое вам спасибо. Это тоже решило проблему. И да, я установил E Text Editor и использовал интеграцию Cygwin/Ruby. – mikeplate

1

Это ошибка файловой системы при вызове mkdir. Автор этого драгоценного камня написал свой код пути к файлу таким образом, что он разбивается на win32 с помощью обратных косых черт вместо слэшей, что приводит к обрыву вызова mkdir. Похоже, ваш драгоценный камень не поддерживается на win32.

+0

Спасибо за информацию – Graham

+0

Похоже, что это локаль-2.0.5, который сломан, а не активированный драгоценный камень, который вы установили (локаль - это depdency). Возможно, вы сможете вручную установить версию локали win32 или найти работу. – Winfield

+0

Это неверно - проблема проявляется, по-видимому, только в системах Win7 x64 и только в невыполненных командных приглашениях. См. Мой ответ для получения дополнительной информации. –

Смежные вопросы