什么是在/ bin / camping中调用的Camping :: Server.start?

时间:2013-07-31 21:12:39

标签: ruby camping

我正在研究Camping网络框架现在如何运作,我不明白Camping::Server.start中第10行/bin/camping正在做什么。

我希望在第131行调用start中的/lib/camping/server.rb方法,因此我在该方法的开头添加了一个简单的puts 'hello'语句,期望调用该语句当我跑/bin/camping时。但是,我从未看到我的puts语句被调用,因此我只能假设调用start方法并不是这样。

我觉得我在这里遗漏了一些明显的东西。以下是野营github页面和相关代码部分的链接:

Github:https://github.com/camping/camping

来自/bin/camping

#!/usr/bin/env ruby

$:.unshift File.dirname(__FILE__) + "/../lib"

require 'camping'
require 'camping/server'

begin
   Camping::Server.start
rescue OptionParser::ParseError => ex
   puts "did it error"
   STDERR.puts "!! #{ex.message}"
   puts "** use `#{File.basename($0)} --help` for more details..."
   exit 1
end

来自/lib/server.rb

def start
 if options[:server] == "console"
    puts "** Starting console"
    @reloader.reload!
    r = @reloader
    eval("self", TOPLEVEL_BINDING).meta_def(:reload!) { r.reload!; nil }
    ARGV.clear
    IRB.start
    exit
 else
    name = server.name[/\w+$/]
    puts "** Starting #{name} on #{options[:Host]}:#{options[:Port]}"
    super
 end
end

1 个答案:

答案 0 :(得分:0)

puts 'hello'上的Camping::Server.start未被调用,因为我不明白如何在ruby中定义静态方法。

start被静态调用,我现在意识到我在代码段中看到的start方法不是静态方法,这意味着另一个start方法是被叫。我调查了Camping::Server并意识到它继承自Rack::Server,其中包含以下方法:

def self.start(options = nil)
   new(options).start
end

这是被调用的方法,而不是/lib/camping/server.rb上的方法。我一直在寻找错误的方法。