我现在正在研究Camping web框架是如何工作的,我不明白/bin/camping第10行的Camping::Server.start在做什么。
我预期这会在第131行调用/lib/camping/server.rb中的/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发布于 2013-08-01 01:53:53
我的puts 'hello' on Camping::Server.start没有被调用,因为我不明白如何在ruby中定义静态方法。
start是静态调用的,现在我意识到我在片段中查看的start方法不是静态方法,这意味着另一个start方法正在被调用。我查看了Camping::Server,发现它继承自Rack::Server,它有以下方法:
def self.start(options = nil)
new(options).start
end这是被调用的方法,而不是/lib/camping/server.rb上的方法。我看错了方法。
https://stackoverflow.com/questions/17981083
复制相似问题