1
0
Fork 0
mirror of https://github.com/puma/puma.git synced 2022-11-09 13:48:40 -05:00
A Ruby/Rack web server built for parallelism
Find a file
2006-02-21 05:48:37 +00:00
bin As the CGI and Handlers get bigger we'll need to separate their code out. This change does that. 2006-02-21 00:55:39 +00:00
doc/site Did the recent announcement for 0.3.5. Modified the Rakefile in prep for the win32 service. 2006-02-18 20:32:05 +00:00
examples Corrected simple service and controller due Macintosh carrier returns (CR) incompatible with win32 ruby (CRLF) (actally that made the scripts useless, now solved). 2006-02-21 05:48:37 +00:00
ext/http11 Fix recommended to the Ragel spec from Ragel author that makes the parser behave better. 2006-02-20 06:38:35 +00:00
lib As the CGI and Handlers get bigger we'll need to separate their code out. This change does that. 2006-02-21 00:55:39 +00:00
test Fixed the URIClassifier to solve a problem with 1 character lookups. Completed more work on Rails runner. Add index.html default lookup for DirHandler. Added some new tests for URIClassifier. 2006-02-10 02:38:18 +00:00
tools Wilson B. setup a nice win32 gem build for Mongrel. 2006-02-15 23:17:23 +00:00
COPYING initial import into trunk 2006-01-28 19:03:53 +00:00
LICENSE initial import into trunk 2006-01-28 19:03:53 +00:00
Rakefile Modified the Rakefile removing dependency of daemons just for win32 gem. Also modified mongrel_rails script to avoid daemonize on win32 platform. 2006-02-20 19:00:49 +00:00
README Change to compensate for people who use CGIWrapper with bad status. Uses the given host from the client rather than the actual host (makes redirect work). Bumped version number. 2006-02-20 06:40:48 +00:00
setup.rb initial import into trunk 2006-01-28 19:03:53 +00:00

= Mongrel:  Simple Fast Mostly Ruby Web Server

Mongrel is a small library that provides a very fast HTTP 1.1 server for Ruby
web applications.  It is not particular to any framework, and is intended to
be just enough to get a web application running behind a more complete and robust
web server.

What makes Mongrel so fast is the careful use of a C extension to provide fast
HTTP 1.1 protocol parsing and fast URI lookup.  This combination makes the server
scream without too many portability issues.

== Status

The 0.3.6 release supports Ruby On Rails much better than previously, and also
sports the beginning of a command and plugin infrastructure.  There is now a more
complete CGIWrapper that handles most of the CGI usage, but still doesn't do the
MIME decoding or file upload/send (it leaves that to CGI).

After you've installed (either with gem install mongrel or via source) you should
have the mongrel_rails command available in your PATH.  Then you just do the following:

 > cd myrailsapp
 > mongrel_rails start

This will start it in the foreground so you can play with it.  It runs your application
in production mode.  To get help do:

 > mongrel_rails start -h 

Finally, you can then start in background mode (probably won't work in win32):

 > mongrel_rails start -d

And you can stop it whenever you like with:

 > mongrel_rails stop

All of which should be done from your application's directory.  It writes the
PID of the process you ran into log/mongrel.pid.

There are also many more new options for configuring the rails runner including
changing to a different directory, adding more MIME types, and setting processor
threads and timeouts.

== Install

It doesn't explicitly require Camping, but if you want to run the examples/camping/
examples then you'll need to install Camping 1.2 at least (and redcloth I think).  
These are all available from RubyGems.

The library consists of a C extension so you'll need a C compiler or at least a friend
who can build it for you.

Finally, the source includes a setup.rb for those who hate RubyGems.


== Usage

The examples/simpletest.rb file has the following code as the simplest
example:

 require 'mongrel'

 class SimpleHandler < Mongrel::HttpHandler
    def process(request, response)
      response.start(200) do |head,out|
        head["Content-Type"] = "text/plain"
        out.write("hello!\n")
      end
    end
 end

 h = Mongrel::HttpServer.new("0.0.0.0", "3000")
 h.register("/test", SimpleHandler.new)
 h.register("/files", Mongrel::DirHandler.new("."))
 h.run.join

If you run this and access port 3000 with a browser it will say
"hello!".  If you access it with any url other than "/test" it will
give a simple 404.  Check out the Mongrel::Error404Handler for a 
basic way to give a more complex 404 message.

This also shows the DirHandler with directory listings.  This is still
rough but it should work for basic hosting.  *File extension to mime
type mapping is missing though.*


== Speed

Like previous releases 0.3.1 continues the trend of making things
as fast as possible.  It currently might be a little slower than
other releases but should hold up pretty good against at least 
WEBrick (especially when running Rails).

As before you can control the number of processor threads (and thus
ActiveRecord database connections) with:

 h = Mongrel::HttpServer.new("0.0.0.0", "3000", 40)

Which will make 40 thread processors.  Right now the optimal setting is up in
the air, but 20 seemed to be about the sweet spot on my systems.  The 
limited processors also means that you can use ActiveRecord as-is and it will
create a matching database connection for each processor thread.  More on 
this in future releases.


== The Future

With the core of Mongrel completed I'm now turning to the next set of features
to make Mongrel useful for hosting web applications in a heavily utilized
production environment.  Right now I'm looking at:

* An idea I've had for an insane caching handler which could speed up quite a
few deployments.

Overall though the goal of Mongrel is to be just enough HTTP to serve a Ruby
web application that sits behind a more complete web server.  Everything 
in the next will focus on actually hosting the major web frameworks for Ruby:

* Camping -- because it's already done (thanks Why).
* Ruby on Rails -- that's where my bread is buttered right now.
* Nitro -- Nitro folks have already hooked this up and started using it.  Nice.
* ????? -- Others people might be interested in.

== Contact

E-mail zedshaw at zedshaw.com and I'll help.  Comments about the API are welcome.