Bugs item #25882, was opened at 2009-05-12 08:01 You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=575&aid=25882&group_id=126
Category: `gem install` command Group: v1.3.x Status: Closed Resolution: Accepted Priority: 3 Submitted By: Lars Christensen (larsch) Assigned to: Daniel Berger (djberg96) Summary: Handling of Windows paths broken in 1.3.3 Initial Comment: Installing gems from local drives other than the current is broken on Windows. RubyGems strips the drive letter (through using the URI class for something which isn't an URI). C:\> gem install p:\path\to\mygem-2.1.18.gem ERROR: While executing gem ... (Errno::ENOENT) No such file or directory - /path/to/mygem-2.1.18.gem Then I tried to pass a valid URI: C:\> gem install file:///p:/path/to/mygem-2.1.18.gem But that doesn't work either; ERROR: could not find gem file:///p:/path/to/mygem-2.1.18.gem locally or in a repository I believe this is because URI#path returns "/p:/path/to/mygem..." (with leading slash), which is not a valid path on Windows. Finally, I attempted to hack RubyGems to prefix file:/// itself, but I don't understand the reason for this line of code in remote_fetcher.rb: remote_gem_path = File.join(path, 'gems', gem_file_name) That causes this error instead: ERROR: While executing gem ... (Errno::ENOENT) No such file or directory - p:/path/to/gems/mygem-2.1.18.gem Notice the extra /gems/ path. ---------------------------------------------------------------------- Comment By: Saurabh Doshi (cashkap) Date: 2010-09-13 10:04 Message: I have used the One Click Ruby installer(1.9.2) and have installed it as C:\Ruby192. I am facing the same error: C:\Ruby192\bin>gem install rake ERROR: While executing gem ... (Errno::ENOENT) No such file or directory - Z:/ I have tried changing the default mapping from z: to c: but havent found success. I don't have admin priv on my m/c. can some please guide me on this Thanks, ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-05-12 13:55 Message: Fixed in SVN. Thanks for the report. Dan ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-05-12 11:59 Message: Oops, let's update that to "if Gem.win_platform && source_uri.scheme" Regards, Dan ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-05-12 11:51 Message: I think this patch does what we want: --- remote_fetcher.orig Sun Apr 12 13:52:46 2009 +++ remote_fetcher.rb Tue May 12 09:35:30 2009 @@ -139,7 +139,11 @@ Gem.configuration.really_verbose when nil then # TODO test for local overriding cache begin - FileUtils.cp URI.unescape(source_uri.path), local_gem_path + if Gem.win_platform? + FileUtils.cp URI.unescape(source_uri.scheme + ':' + source_uri.path), local_gem_path + else + FileUtils.cp URI.unescape(source_uri.path), local_gem_path + end rescue Errno::EACCES local_gem_path = source_uri.to_s end ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-05-12 09:46 Message: Looks like a bug in line 142 of remote_fetcher.rb related to the URI class and the fact that we're stripping the scheme off of Windows paths. It works for "C:" because, iirc, certain Ruby core File methods assume "C:" if no drive is found. We'll have to fix this. Regards, Dan ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-05-12 09:22 Message: Well, this is odd. I tried installing from an explicit path using "C:\Documents and Settings\djberge". That worked fine. But, when I tried to install from a drive other than "C:", things went bad: C:\Documents and Settings\djberge>gem install "z:\djberge on my mac\documents\workspace\ptools\ptools-1.1.7.gem" --verbose --debug Exception `NameError' at C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:161 - uninitialized constant Gem::Commands::InstallCommand Exception `IOError' at C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/format.rb:50 - closed stream Installing gem ptools-1.1.7 Exception `Errno::ENOENT' at C:/Ruby/lib/ruby/1.8/fileutils.rb:1200 - No such file or directory - /djberge on my mac/documents/workspace/ptools/ptools-1.1.7.gem ERROR: While executing gem ... (Errno::ENOENT) No such file or directory - /djberge on my mac/documents/workspace/ptools/ptools-1.1.7.gem C:/Ruby/lib/ruby/1.8/fileutils.rb:1200:in `stat' C:/Ruby/lib/ruby/1.8/fileutils.rb:1200:in `lstat' C:/Ruby/lib/ruby/1.8/fileutils.rb:1178:in `stat' C:/Ruby/lib/ruby/1.8/fileutils.rb:1260:in `copy_file' C:/Ruby/lib/ruby/1.8/fileutils.rb:463:in `copy_file' C:/Ruby/lib/ruby/1.8/fileutils.rb:383:in `cp' C:/Ruby/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest' C:/Ruby/lib/ruby/1.8/fileutils.rb:1411:in `fu_each_src_dest0' C:/Ruby/lib/ruby/1.8/fileutils.rb:1393:in `fu_each_src_dest' C:/Ruby/lib/ruby/1.8/fileutils.rb:382:in `cp' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:142:in `download' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:232:in `install' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:222:in `each' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:222:in `install' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:78:in `execute' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:75:in `each' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:75:in `execute' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command.rb:254:in `invoke' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:132:in `process_args' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:102:in `run' C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:58:in `run' C:/Ruby/bin/gem:21 I'll have to investigate further to determine if this is a bug in rubygems or fileutils. Regards, Dan ---------------------------------------------------------------------- Comment By: Daniel Berger (djberg96) Date: 2009-05-12 08:20 Message: The use of file urls is meant for use with the --source flag (i.e. from a local repository), which is why the method includes the 'gems' directory. However, the "gem install p:\path\to\mygem-2.1.18.gem" should work. I'll take a look. Regards, Dan ---------------------------------------------------------------------- You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=575&aid=25882&group_id=126 _______________________________________________ Rubygems-developers mailing list http://rubyforge.org/projects/rubygems Rubygems-developers@rubyforge.org http://rubyforge.org/mailman/listinfo/rubygems-developers