2010-07-08 18 views
4

我想安装一个名为activeldap的红宝石,但是,它不会让我安装它。我不断收到包括Errno :: EEXIST错误在内的各种错误。我在下面添加了错误信息。有任何想法吗?Ruby:Errno :: EEXIST在安装gem时意味着什么?

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

你有任何机会安装了Cygwin? – 2010-07-09 21:49:06

回答

12

更新2010年7月13日

这是非常有可能,这个问题是由安装在Windows 7 E文编辑器造成的。为了在Windows上提供对TextMate兼容性,E自动安装Cygwin的。在安装过程中,会运行一个bash脚本,它将尝试修改C:上的权限。这里的行:

chmod o-w `cygpath $HOMEDRIVE` 

显然,当Cygwin的设置权限,它使得在Windows ACL 权限的混乱。为了保护系统根驱动器的完整性,Windows UAC执行了所谓的虚拟化或数据重定向。 More info here。在我们的例子中,虚拟化并没有搞乱真正的根目录上的权限,而是破坏了VirtualStore(%localappdata%\ VirtualStore)目录中的权限并破坏其权限,使其根目录无法访问(尽管任何内部目录都保持不变并且可访问)。当Ruby安装宝石时,它会尝试访问根目录C:\目录,这是UAC不允许的,因此它会尝试访问%localappdata%\ VirtualStore,如果您拥有损坏的权限,则无法访问它,从而导致失败。

您可以通过从VirtualStore中删除不良许可来解决此问题(您需要在资源管理器中取消隐藏受保护的系统文件以查看VirtualStore)。正确的权限应该从父文件夹继承,应该是:

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

这里是比较破权限VS正确权限的要点是:

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上安装gem时,从来没有要求提升,所以我们在这里看到的行为是错误的。

有与此相关的问题在这里讨论:http://groups.google.com/group/rubyinstaller/browse_thread/thread/df7b7c217ad7d882

+0

这解决了这个问题。我刚刚以管理员身份运行命令提示符,并解决了问题。谢谢查尔斯! – Graham 2010-07-10 13:37:47

+0

@Graham - 你在某个时候安装了E文本编辑器吗? – 2010-07-12 18:16:34

+0

非常感谢。这也解决了我的问题。是的,我已经安装了E文本编辑器并使用了它的Cygwin/Ruby集成。 – mikeplate 2011-02-03 08:47:10

1

这是mkdir调用中的文件系统错误。这个gem的作者写了他们的文件路径代码,使得它在win32上以反斜杠而不是正斜杠断行,导致mkdir调用被破坏。看起来你的宝石在win32上不受支持。

+0

感谢提供的信息 – Graham 2010-07-08 18:37:48

+0

它看起来像是破损的locale-2.0.5 gem,而不是你安装的activeldap gem(locale是一个错误)。您可能可以手动安装语言环境的win32版本或查找解决方法。 – Winfield 2010-07-08 20:03:36

+0

这是不正确的 - 问题似乎只在Win7 x64系统上显示,并且只在非提升的命令提示符下显示。查看我的答案以获取更多信息。 – 2010-07-09 18:30:08