Ruby require_relative执行脚本?

时间:2013-06-22 15:53:49

标签: ruby windows eclipse require relative

我正在使用ruby中的游戏服务器,在测试期间,我无法单独测试组件。我没有从我的启动器,只是服务器获得输出,所以我评论了服务器的初始化 - 但是eclipse仍显示服务器的输出!

然后我去了命令行,假设eclipse正在查看错误的文件(git之前已将其搞砸了,但正如您所看到的,堆栈跟踪显示Server.rb正在完整地执行第5行:require_relative 'Server'

Sublime/cmd screenshot

这是文件的文本内容:

class Launcher


  puts "File saved at #{File.mtime($0)}"


  require_relative 'Server'
  require_relative 'Game'

  #STDOUT.sync = true

  puts "Launcher started"
  #server = Server.new
  print "server made"
  game = Game.new
  #serverThread = Thread.new{server.start()}
  gameThread = Thread.new{game.start()}

  while (running)
    print "Stop? "
    input = gets.chomp
    if (input.equals?("yes"))
      running = false
    end
  end

  server.stop
  game.stop
  gameThread.join
  serverThread.join

end

和终端输出:

C:\Users\gossfunkel\git\citadelserver\RubyCitadelServer>ruby Launcher.rb
File saved at 2013-06-22 18:16:44 +0100
Server starting up at 2013-06-22 18:16:47 +0100...
C:/Users/gossfunkel/git/citadelserver/RubyCitadelServer/Server.rb:20:in `recvfro
m': Interrupt
        from C:/Users/gossfunkel/git/citadelserver/RubyCitadelServer/Server.rb:2
0:in `run'
        from C:/Users/gossfunkel/git/citadelserver/RubyCitadelServer/Server.rb:1
5:in `start'
        from C:/Users/gossfunkel/git/citadelserver/RubyCitadelServer/Server.rb:3
0:in `<class:Server>'
        from C:/Users/gossfunkel/git/citadelserver/RubyCitadelServer/Server.rb:1
:in `<top (required)>'
        from Launcher.rb:5:in `require_relative'
        from Launcher.rb:5:in `<class:Launcher>'
        from Launcher.rb:1:in `<main>'

如果没有发生这种情况,我该如何要求文件,应该是吗?

1 个答案:

答案 0 :(得分:0)

如果没有看到课程,我无法分辨,但我猜是

  • game.start做的比你想象的要多,并为自己启动服务器

  • 正如您的主题所示,您正在运行与您正在编辑的文件不同的文件(或者在更改后不保存文件)。通过在程序顶部放置一个明显的puts进行检查。像

    这样的东西
    puts "File saved at #{File.mtime($0)}"
    

    应该做的伎俩

  • 经过讨论,似乎有第三种选择。 Server.pm中的代码创建并运行服务器以及定义类。您需要删除require以及使用Server类的行。