Что вызывает 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
, Я искал не тот метод.