Что вызывает Camping::Server.start в /bin/camp?

Я учусь как Camping веб-фреймворк работает прямо сейчас, и я не понимаю, что Camping::Server.start в строке 10 в /bin/camping делается.

Я ожидал, что это вызовет start метод в /lib/camping/server.rb в строке 131, и поэтому я положил простой puts 'hello' оператор в начале этого метода, ожидая, что этот оператор будет вызываться при запуске /bin/camping, Тем не менее, я никогда не видел, чтобы вызывался мой оператор put, поэтому я могу только предположить, что это не так 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 ответ

Решение

Мой 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, Я искал не тот метод.

Другие вопросы по тегам