views:

356

answers:

2

I am trying to install a ruby gem called activeldap, however, it won't let me install it. I keep getting all kinds of errors including the Errno::EEXIST error. I added the error info below. Any ideas?

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
+1  A: 

This is a file-system error on a mkdir call. The author of this gem wrote their file path code in such a way that it breaks on win32 with backslashes instead of forward slashes, resulting in a busted mkdir call. Looks like your gem isn't supported on win32.

Winfield
Thanks for the info
Graham
It looks like it's the locale-2.0.5 gem that's broken, not the activeldap gem you installed (locale is a depdency). You might be able to manually install a win32 version of locale or find a work-around.
Winfield
This isn't correct - the problem is manifesting itself seemingly only on Win7 x64 systems and only in non-elevated command prompts. See my answer for more info.
Charles Roper
Actually, it seems to be happening on both 32 and 64 bit editions of Windows 7.
Charles Roper
+3  A: 

Update 13 July 2010

It is very likely that this problem is caused by installation of E Text Editor on Windows 7. In order to provide compatibility with TextMate on Windows, E automatically installs Cygwin. During installation a bash script is run which tries to modify permissions on C:. Here's the line:

chmod o-w `cygpath $HOMEDRIVE`

Apparently when Cygwin sets permissions, it is making a mess of the Windows ACL permissions. In order to protect the integrity of the system root drive, Windows UAC does something known as Virtualization or Data Redirection. More info here. In our case, instead of messing up the permissions on the real root directory, Virtualization kicks in and corrupts permissions on the VirtualStore (%localappdata%\VirtualStore) directory instead, making its root inaccessible (although any directories within remain untouched and accessible). When Ruby installs gems it tries to access the root C:\ directory, which UAC disallows, so it tries to access %localappdata%\VirtualStore, which it can't if you have corrupt permissions, thus you get the failure.

You can fix this by removing the bad permissions from VirtualStore (you'll need to unhide protected system files in Explorer to see VirtualStore). The correct permissions should inherit from the parent folder and should be:

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

Here's a gist comparing the broken permissions vs the correct permissions:

http://gist.github.com/471087

The author of E is aware of this problem and working on a fix.


This seems to be a weird permissions error that is apparently only occurring on Windows 7. Try opening an elevated command prompt and installing from there. Here's what I get when elevated:

[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...

If I run from a standard command prompt, I get this:

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

I'll update this answer if a better solution comes to light. It never has been a requirement to elevate when installing gems on Windows and so the behaviour we're seeing here is wrong.

There is a discussion related to this issue here: http://groups.google.com/group/rubyinstaller/browse_thread/thread/df7b7c217ad7d882

Charles Roper
This fixed it. I just ran the command prompt as administrator and it fixed the problem. Thanks Charles!
Graham
@Graham - did you install E Text Editor at some point?
Charles Roper