【发布时间】:2012-02-29 08:40:02
【问题描述】:
我可以使用 rvm 在 cygwin 上安装 jruby,但是没有安装 jruby gem,并且任何安装 gem 的尝试都失败了。
这是我在安装 jruby 时遇到的错误,当 rvm 尝试安装默认 gemset 时:
Building Nailgun
jruby-1.6.7 - #installing to /home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7
jruby-1.6.7 - #importing default gemsets (/home/salil.wadnerkar/.rvm/gemsets/)
Copying across included gems
cygpath: can't convert empty path
Error opening script file: C:/cygwin/home/salil.wadnerkar/.rvm/src/jruby-1.6.7/tool/nailgun/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin/gem (The system cannot find the path specified)
任何进一步尝试安装任何 gem 都会遇到类似的错误:
$ which gem
/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin/gem
$ gem install rake
cygpath: can't convert empty path
Fetching: rake-0.9.2.2.gem (100%)
ERROR: While executing gem ... (Errno::ENOENT)
No such file or directory - C:/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7/cache/rake-0.9.2.2.gem
更新:
这是我的 gem 环境
$ gem env
cygpath: can't convert empty path
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.15
- RUBY VERSION: 1.9.2 (2012-02-22 patchlevel 312) [java]
- INSTALLATION DIRECTORY: /home/salil.wadnerkar/.rvm/gems/jruby-1.6.7
- RUBY EXECUTABLE: C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin/
jruby.exe
- EXECUTABLE DIRECTORY: /home/salil.wadnerkar/.rvm/gems/jruby-1.6.7/bin
- RUBYGEMS PLATFORMS:
- ruby
- universal-java-1.7
- GEM PATHS:
- /home/salil.wadnerkar/.rvm/gems/jruby-1.6.7
- /home/salil.wadnerkar/.rvm/gems/jruby-1.6.7:/home/salil.wadnerkar/.rvm/ge
ms/jruby-1.6.7@global
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- "install" => "--no-rdoc --no-ri --env-shebang"
- "update" => "--no-rdoc --no-ri --env-shebang"
- REMOTE SOURCES:
- http://rubygems.org/
编辑:
这是我的 rvm 信息
$ rvm info
jruby-1.6.7:
system:
uname: "CYGWIN_NT-6.1 got002518 1.7.11(0.260/5/3) 2012-02-24 14:05 i686 Cygwin"
bash: "/usr/bin/bash => GNU bash, version 4.1.10(4)-release (i686-pc-cygwin)"
zsh: " => not installed"
rvm:
version: "rvm 1.10.3 by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.beginrescueend.com/]"
updated: "18 hours 30 minutes 15 seconds ago"
cygpath: can't convert empty path
ruby:
interpreter: "jruby"
version: "1.6.7"
date: "2012-02-22"
platform: "Windows 7-x86-java"
patchlevel: "TM"
full_version: "jruby 1.6.7 (ruby-1.9.2-p312) (2012-02-22 3e82bc8) (Java HotS"ot(TM) Client VM 1.7.0_03) [Windows 7-x86-java]
homes:
gem: "/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7"
ruby: "/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7"
binaries:
ruby: "/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin/ruby"
irb: "/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin/irb"
gem: "/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin/gem"
rake: "/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin/rake"
environment:
PATH: "/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7/bin:/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7@global/bin:/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin:/home/salil.wadnerkar/.rvm/bin:/usr/local/bin:/usr/bin:/cygdrive/c/Users/salilw_adm/AppData/Roaming/cabal/bin:/cygdrive/c/Program Files/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files/Hummingbird/Connectivity/14.00/Accessories:/cygdrive/c/Program Files/Hummingbird/Connectivity/14.00/NFS Maestro:/cygdrive/c/Program Files/WindowsLive/Shared:/cygdrive/c/Program Files/Java/jdk1.7.0_03/bin:/cygdrive/c/Python27:/cygdrive/c/Python27/Scripts:/cygdrive/c/Program Files/QuickTi
me/QTSystem:/cygdrive/c/Program Files/Subversion/bin:/cygdrive/c/apache-ant-1.8.2/bin:/cygdrive/c/Ruby192/bin:/cygdrive/c/Users/salil.wadnerkar/AppData/Roaming/cabal/bin"
GEM_HOME: "/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7"
GEM_PATH: "/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7:/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7@global"
MY_RUBY_HOME: "/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7"
IRBRC: "/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/.irbrc"
RUBYOPT: ""
gemset: ""
我认为这与 cygwin 使用 GEMPATH 的方式有关。
$ gem install bundler
cygpath: can't convert empty path
Fetching: bundler-1.0.22.gem (100%)
ERROR: While executing gem ... (Errno::ENOENT)
No such file or directory - C:/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7/ca
che/bundler-1.0.22.gem
$ echo $GEM_PATH
/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7:/home/salil.wadnerkar/.rvm/gems/jrub
y-1.6.7@global
在安装 gem 时,gem 正在尝试使用 Windows 样式的路径。事实上,我必须手动创建gem缓存目录,因为它使用的是windows风格的路径,找不到gem缓存目录来安装gem。
编辑: rvm 似乎正确地将其路径添加到 PATH 的前面。
$ echo $PATH
/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7/bin:/home/salil.wadnerkar/.rvm/gems/jruby- 1.6.7@global/bin:/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin:/home/salil.wadnerkar/.rvm/bin:/usr/local/bin:/usr/bin:.....
编辑:
这是调试命令的输出。我将把“cygpath”放在某个地方,看看它是否修复了路径解释。
$ gem install rake --debug
cygpath: can't convert empty path
ERROR: While executing gem ... (Errno::ENOENT)
No such file or directory - C:/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7/cache/rake-0.9.2.2.gem
org/jruby/RubyFile.java:465:in `initialize'
org/jruby/RubyIO.java:1135:in `open'
C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:152:in `download'
C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:278:in `install'
org/jruby/RubyArray.java:1615:in `each'
org/jruby/RubyEnumerable.java:956:in `each_with_index'
C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:270:in `install'
C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:121:in `execute'
org/jruby/RubyArray.java:1615:in `each'
C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:115:in `execute'
C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/command.rb:278:in `invoke'
C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:147:in `process_args'
C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:117:in `run'
C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:65:in `run'
C:\cygwin\home\salil.wadnerkar\.rvm\rubies\jruby-1.6.7\bin\jgem:25:in `(root)'
Exception `Gem::SystemExitException' at C:/cygwin/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/lib/ruby/site_ruby/1.8/rubygems/user_interaction.rb:332 - Exiting RubyGems with exit_code 1
【问题讨论】:
-
请添加
gem env或者rvm info -
@mpapis,添加了“gem env”和“rvm info”输出。
-
我认为它与 GEMPATH 有关: $ gem install rake cygpath: can't convert empty path Fetching: rake-0.9.2.2.gem (100%) ERROR: While execution gem 。 .. (Errno::ENOENT) 没有这样的文件或目录 - C:/home/salil.wadnerkar/.rvm/gems/jruby-1.6.7/cache/rake-0.9.2.2.gem
-
安装其他红宝石有用吗?试过
rvm install 1.9.3 && rvm 1.9.3 do gem install bundler? -
我在这里遇到了完全相同的问题。我在 cygwin 之外使用 JRuby 没有问题,但确实 cygpath 在 cygwin 中与 JRuby 的行为很奇怪。我会尝试查找更多信息。