晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/alt/ruby32/share/gems/gems/rackup-2.1.0/lib/rackup/ |
| Current File : //opt/alt/ruby32/share/gems/gems/rackup-2.1.0/lib/rackup/handler.rb |
# frozen_string_literal: true
# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.
module Rackup
# *Handlers* connect web servers with Rack.
#
# Rackup includes Handlers for WEBrick and CGI.
#
# Handlers usually are activated by calling <tt>MyHandler.run(myapp)</tt>.
# A second optional hash can be passed to include server-specific
# configuration.
module Handler
@handlers = {}
# Register a named handler class.
def self.register(name, klass)
if klass.is_a?(String)
warn "Calling Rackup::Handler.register with a string is deprecated, use the class/module itself.", uplevel: 1
klass = self.const_get(klass, false)
end
name = name.to_sym
@handlers[name] = klass
end
def self.[](name)
name = name.to_sym
begin
@handlers[name] || self.const_get(name, false)
rescue NameError
# Ignore.
end
end
def self.get(name)
return nil unless name
name = name.to_sym
if server = self[name]
return server
end
begin
require_handler("rackup/handler", name)
rescue LoadError
require_handler("rack/handler", name)
end
return self[name]
end
RACK_HANDLER = 'RACK_HANDLER'
RACKUP_HANDLER = 'RACKUP_HANDLER'
SERVER_NAMES = %i(puma falcon webrick).freeze
private_constant :SERVER_NAMES
# Select first available Rack handler given an `Array` of server names.
# Raises `LoadError` if no handler was found.
#
# > pick ['puma', 'webrick']
# => Rackup::Handler::WEBrick
def self.pick(server_names)
server_names = Array(server_names)
server_names.each do |server_name|
begin
server = self.get(server_name)
return server if server
rescue LoadError
# Ignore.
end
end
raise LoadError, "Couldn't find handler for: #{server_names.join(', ')}."
end
def self.default
if rack_handler = ENV[RACKUP_HANDLER]
self.get(rack_handler)
elsif rack_handler = ENV[RACK_HANDLER]
warn "RACK_HANDLER is deprecated, use RACKUP_HANDLER."
self.get(rack_handler)
else
pick SERVER_NAMES
end
end
# Transforms server-name constants to their canonical form as filenames,
# then tries to require them but silences the LoadError if not found
#
# Naming convention:
#
# Foo # => 'foo'
# FooBar # => 'foo_bar.rb'
# FooBAR # => 'foobar.rb'
# FOObar # => 'foobar.rb'
# FOOBAR # => 'foobar.rb'
# FooBarBaz # => 'foo_bar_baz.rb'
def self.require_handler(prefix, const_name)
file = const_name.to_s.gsub(/^[A-Z]+/) { |pre| pre.downcase }.
gsub(/[A-Z]+[^A-Z]/, '_\&').downcase
require(::File.join(prefix, file))
end
end
end
|