【问题标题】:What is Camping::Server.start invoking in /bin/camping?什么是 Camping::Server.start 在 /bin/camping 中调用?
【发布时间】:2013-07-31 21:12:38
【问题描述】:

我现在正在研究 Camping web 框架是如何工作的,但我不明白 /bin/camping 第 10 行的 Camping::Server.start 在做什么。

我希望这会在第 131 行的 /lib/camping/server.rb 中调用 start 方法,因此我在该方法的开头放置了一个简单的 puts 'hello' 语句,希望在我运行 /bin/camping 时调用该语句.但是,我从未见过我的 puts 语句被调用,所以我只能假设不是 start 方法被调用。

我觉得我在这里遗漏了一些明显的东西。这里是camping 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

【问题讨论】:

    标签: ruby camping


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2011-04-28
      相关资源
      最近更新 更多