Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby: What does Errno::EEXIST mean when installing a gem?

Tags:

ruby

rubygems

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
like image 679
Graham Avatar asked Dec 12 '22 20:12

Graham


2 Answers

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

like image 59
Charles Roper Avatar answered Jan 22 '23 11:01

Charles Roper


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.

like image 41
Winfield Avatar answered Jan 22 '23 11:01

Winfield