Module: Rackup::Handler
- Defined in:
- lib/rackup/handler.rb,
lib/rackup/handler/cgi.rb,
lib/rackup/handler/webrick.rb
Overview
Handlers connect web servers with Rack.
Rackup includes Handlers for WEBrick and CGI.
Handlers usually are activated by calling MyHandler.run(myapp). A second optional hash can be passed to include server-specific configuration.
Defined Under Namespace
Constant Summary collapse
- RACK_HANDLER =
'RACK_HANDLER'- RACKUP_HANDLER =
'RACKUP_HANDLER'
Class Method Summary collapse
- .[](name) ⇒ Object
- .default ⇒ Object
- .get(name) ⇒ Object
-
.pick(server_names) ⇒ Object
Select first available Rack handler given an ‘Array` of server names.
- .register(name, klass) ⇒ Object
-
.require_handler(prefix, const_name) ⇒ Object
Transforms server-name constants to their canonical form as filenames, then tries to require them but silences the LoadError if not found.
Class Method Details
.[](name) ⇒ Object
14 15 16 17 18 19 20 |
# File 'lib/rackup/handler.rb', line 14 def self.[](name) begin Rack::Handler[name] || self.const_get(name, false) rescue NameError # Ignore. end end |
.default ⇒ Object
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/rackup/handler.rb', line 68 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 |
.get(name) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/rackup/handler.rb', line 22 def self.get(name) return nil unless name name = name.to_sym if server = self[name] return server end require_handler("rack/handler", name) return self[name] end |
.pick(server_names) ⇒ Object
Select first available Rack handler given an ‘Array` of server names. Raises `LoadError` if no handler was found.
> pick ['puma', 'webrick']
=> Rackup::Handler::WEBrick
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/rackup/handler.rb', line 53 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 |
.register(name, klass) ⇒ Object
36 37 38 39 40 |
# File 'lib/rackup/handler.rb', line 36 def self.register(name, klass) name = name.to_sym Rack::Handler.register(name, klass) end |
.require_handler(prefix, const_name) ⇒ Object
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.rb'
FOOBAR # => 'foobar.rb'
FooBarBaz # => 'foo_bar_baz.rb'
90 91 92 93 94 95 |
# File 'lib/rackup/handler.rb', line 90 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 |