首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Camping::Server.start在/bin/露营中调用了什么?

Camping::Server.start在/bin/露营中调用了什么?
EN

Stack Overflow用户
提问于 2013-07-31 21:12:38
回答 1查看 58关注 0票数 0

我现在正在研究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

代码语言:javascript
复制
#!/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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 01:53:53

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

start是静态调用的,现在我意识到我在片段中查看的start方法不是静态方法,这意味着另一个start方法正在被调用。我查看了Camping::Server,发现它继承自Rack::Server,它有以下方法:

代码语言:javascript
复制
def self.start(options = nil)
   new(options).start
end

这是被调用的方法,而不是/lib/camping/server.rb上的方法。我看错了方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17981083

复制
相关文章

相似问题

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