Ruby: Что означает Errno :: EEXIST при установке гема? - PullRequest
4 голосов
/ 08 июля 2010

Я пытаюсь установить рубиновый гем под названием activeldap, однако он не позволяет мне установить его.Я продолжаю получать все виды ошибок, включая ошибку 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

Ответы [ 2 ]

12 голосов
/ 09 июля 2010

Обновление от 13 июля 2010 г.

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

chmod o-w `cygpath $HOMEDRIVE`

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

Это можно исправить, удалив неверные разрешения из VirtualStore (вам нужно будет показать защищенные системные файлы в Explorer, чтобы увидеть 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

1 голос
/ 08 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...