首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby: irb不能在Windows上运行

Ruby: irb不能在Windows上运行
EN

Stack Overflow用户
提问于 2012-08-20 00:34:03
回答 3查看 5.1K关注 0票数 2

我已经使用Ruby 1.9.3-p194一键安装程序在我的windows7个人电脑上安装了ruby1.93。我可以使用ruby命令来解释文件,但当我键入irb时,它会显示以下错误:

代码语言:javascript
复制
C:\Users\Acer>irb
F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2111:in `expand_path': non-absolute home
(ArgumentError)
        from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2111:in `_rl_read_init_file'

        from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2094:in `rl_read_init_file'
        from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2515:in `readline_initialize
_everything'
        from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:3746:in `rl_initialize'
        from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:4758:in `readline'
        from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/readline.rb:40:in `readline'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/input-method.rb:115:in `gets'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:139:in `block (2 levels) in eval_input'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:273:in `signal_status'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:138:in `block in eval_input'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:188:in `call'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:188:in `buf_input'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:103:in `getc'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/slex.rb:205:in `match_io'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/slex.rb:75:in `match'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:286:in `token'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:262:in `lex'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:233:in `block (2 levels) in each_top
_level_statement'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_stat
ement'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:155:in `eval_input'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:70:in `block in start'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:69:in `catch'
        from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:69:in `start'
        from F:/Programs/Ruby193/bin/irb:12:in `<main>'

我在F:/Programs/Ruby193文件夹中安装了Ruby,并在我的PATH中添加了F:/Programs/Ruby193/bin。我也尝试了Ruby 1.87,但得到了同样的错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-20 16:08:59

我从Pete的评论中得到了解决方案。我的计算机上安装了Cygwin,这是导致问题的原因(不确定原因)。我刚刚在命令行中输入了以下内容:set HOME=irb开始工作!

您还可以查看this link

票数 5
EN

Stack Overflow用户

发布于 2019-10-25 07:51:35

如果在Ruby 1.9.3中启动与fiddle相关的IRB时遇到问题,可以这样做:

rubyxxx\lib\ruby\site_ruby\x.x.x\rbreadline.rb replace中:

这一点:

代码语言:javascript
复制
  require 'fiddle'
  class Win32API
    DLL = {}
    TYPEMAP = {"0" => Fiddle::TYPE_VOID, "S" => Fiddle::TYPE_VOIDP, "I" => Fiddle::TYPE_LONG}
    CALL_TYPE_TO_ABI = {:stdcall => 1, :cdecl => 1, nil => 1} #Taken from Fiddle::Importer

    def initialize(dllname, func, import, export = "0", calltype = :stdcall)
      @proto = import.join.tr("VPpNnLlIi", "0SSI").chomp('0').split('')
      handle = DLL[dllname] ||= Fiddle.dlopen(dllname)
      @func = Fiddle::Function.new(handle[func], TYPEMAP.values_at(*@proto), CALL_TYPE_TO_ABI[calltype])
    end

    def call(*args)
      args.each_with_index do |x, i|
        args[i], = [x == 0 ? nil : x].pack("p").unpack("l!*") if @proto[i] == "S"
        args[i], = [x].pack("I").unpack("i") if @proto[i] == "I"
      end
      @func.call(*args).to_i || 0
    end

通过以下方式:

代码语言:javascript
复制
  require 'dl'
  class Win32API
    DLL = {}
    TYPEMAP = {"0" => DL::TYPE_VOID, "S" => DL::TYPE_VOIDP, "I" => DL::TYPE_LONG}

    def initialize(dllname, func, import, export = "0", calltype = :stdcall)
      @proto = [import].join.tr("VPpNnLlIi", "0SSI").sub(/^(.)0*$/, '\1')
      handle = DLL[dllname] ||= DL.dlopen(dllname)
      @func = DL::CFunc.new(handle[func], TYPEMAP[export.tr("VPpNnLlIi", "0SSI")], func, calltype)
    end

    def call(*args)
      import = @proto.split("")
      args.each_with_index do |x, i|
        args[i], = [x == 0 ? nil : x].pack("p").unpack("l!*") if import[i] == "S"
        args[i], = [x].pack("I").unpack("i") if import[i] == "I"
      end
      ret, = @func.call(args)
      return ret || 0
    end
票数 0
EN

Stack Overflow用户

发布于 2012-08-20 20:26:16

我建议使用DevKit。我使用的是64位Windows7和ruby 1.9.3-p125,一切都在DevKit上运行得很流畅。

代码语言:javascript
复制
d:\>systeminfo | findstr /B /C:"OS Name"
OS Name:                   Microsoft Windows 7 Enterprise

d:\>ruby -v
ruby 1.9.3p125 (2012-02-16) [i386-mingw32]

d:\>irb
irb(main):001:0> 2+2
=> 4
irb(main):002:0> exit
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12028130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档