我正在研究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
答案 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
上的方法。我一直在寻找错误的方法。