【问题标题】:error while installing jruby using rvm使用 rvm 安装 jruby 时出错
【发布时间】: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 &amp;&amp; rvm 1.9.3 do gem install bundler
  • 我在这里遇到了完全相同的问题。我在 cygwin 之外使用 JRuby 没有问题,但确实 cygpath 在 cygwin 中与 JRuby 的行为很奇怪。我会尝试查找更多信息。

标签: ruby cygwin jruby rvm


【解决方案1】:
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)

路径格式是你的问题。 Cygwin 不(也不应该)识别这样的路径。同样的路径应该是:

/home/salil.wadnerkar/.rvm/src/jruby-1.6.7/tool/nailgun/home/salil.wadnerkar/.rvm/rubies/jruby-1.6.7/bin/gem

您的问题归结为这一点 - 一个对 Cygwin 非常重要的工具,被 PATH 系统变量中另一个同名的工具覆盖,并且该工具位于 目录中在您的 Cygwin 二进制路径之前

我在尝试编译原生 gem 时遇到了类似的问题,但我的 PATH 中有 Windows 版本的 GCC,它在 Cygwin 二进制路径之前)。

一个非常快速的解决方案是编辑您的系统 PATH 环境变量并确保您的 Cygwin 二进制路径是那里的第一个条目,如下所示:

PATH = C:\cygwin\bin;C:\your\other\paths;C:\windows\system32;...

等等

当然,退出所有 Cygwin 控制台并停止任何可能仍在运行的 Cygwin 程序,然后再次启动控制台/其他程序。一切都应该没问题。

希望对你有帮助。

【讨论】:

  • 感谢您的回答。但是 rvm 似乎在 PATH 变量的前面正确添加了路径。 PL。查看更新。
【解决方案2】:

我也遇到过类似的问题。我尝试了一切可能的方法,包括重新安装 Cygwin。最后我通过从源代码构建 jruby 克服了这些问题。

【讨论】:

    【解决方案3】:

    在我上一篇文章的基础上,我通过 Ant build 从源代码构建 jruby 克服了这些问题,如 jruby 源代码包中的自述文件中所述。希望这会有所帮助。

    【讨论】:

    • 非常感谢。我也试过了,但看起来我做得不对。我会再试一次。
    猜你喜欢
    • 1970-01-01
    • 2013-09-27
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2012-07-23
    相关资源
    最近更新 更多