1
0
Fork 0
mirror of https://github.com/puma/puma.git synced 2022-11-09 13:48:40 -05:00

Created the project page dripping with sappy honey goodness.

git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@33 19e92222-5c0b-0410-8929-a290d50e31e9
This commit is contained in:
zedshaw 2006-02-12 19:31:28 +00:00
parent 67a0d9e933
commit 6120599b9c
71 changed files with 776 additions and 5 deletions

6
doc/site/README Normal file
View file

@ -0,0 +1,6 @@
webgen Website Template 'default'
This is the default website template. It only contains the basic files and is a good
starting place for any website.
This note can be deleted!

2
doc/site/config.yaml Normal file
View file

@ -0,0 +1,2 @@
# Configuration file for webgen
# Used to set the parameters of the plugins

View file

@ -0,0 +1,54 @@
---
title: Attributions
inMenu: true
directoryName: Attributions
ordering: 100
---
h1. The People Who Made It Possible
There's quite a few people who either directly or indirectly helped to
make Mongrel. If I missed anyone then just e-mail me and I'll put your
name here.
h2. Site Template
The site's look and template is blatantly stolen from "OWD":http://openwebdesign.org
and is specifically Copyright © 2006 "Evgeni Dinev":http://www.evgenidinev.com/
under the "Creative Commons":http://creativecommons.org license.
h2. Photos
The photos were found on "Flickr":http://flickr.com and are all licensed under the
"Creative Commons":http://creativecommons.org license. The following images are
attributed to the people based on their Flickr accounts:
* "Bantay meets the world":http://www.flickr.com/photos/colloidfarl/39744440/in/set-625842/
* "Caution: Beetlejam":http://www.flickr.com/photos/gyuvallos/90208926/
* "Resting":http://flickr.com/photos/ashey/95638805/
* "Allen Wrench Mess":http://www.flickr.com/photos/eklektikos/79968762/
* "Tools":http://www.flickr.com/photos/book_slut/87022458/
* "Big Wrench":http://flickr.com/photos/actionatadistance/63325054/in/set-1367823/
* "bolt":http://www-us.flickr.com/photos/lwr/6267035/in/set-775375/
* "Book Collage":http://www.flickr.com/photos/muybridge/85895062/
* "squared circle megaphone":http://www.ruby-lang.org/en/20020104.html
Thanks to those people who publish their photos with the "Creative Commons":http://creativecommons.org
license so others can see their photography (and look at their dogs).
h2. Coding
* "Rick Olson (aka technoweenie)":http://techno-weenie.net/ was the first to grab Mongrel
and cram "Camping":http://redhanded.hobix.com/bits/campingAMicroframework.html into it.
* "Why the lucky stiff":http://whytheluckystiff.net/ did work on getting the "Camping Framework":http://redhanded.hobix.com/bits/campingAMicroframework.html working with Mongrel more completely.
h2. Tools
* "RubyForge":http://rubyforge.org/ for providing space and hooking it all up.
* "Webgen":http://webgen.rubyforge.org/
h2. Testing
Lots of people from the
"Ruby on Rails mailing list":http://lists.rubyonrails.org/mailman/listinfo/rails
and "ruby-lang mailing list":http://www.ruby-lang.org/en/20020104.html found bugs
reported them.

434
doc/site/src/default.css Normal file
View file

@ -0,0 +1,434 @@
html, body {
margin: 0;
padding: 0;
border: 0;
height: 100%;
}
body {
background-color: #fff;
color: #444;
font-size: 84%;
font-family: "Trebuchet MS", Arial, sans-serif;
text-align: center;
}
a {
color: #556379;
}
a:hover {
color: #8496B3;
text-decoration: none;
}
h1 {
font-size: 1.3em;
font-family: Arial;
color: #7B98F8;
margin: 0;
padding-bottom: 8px;
}
h2 {
font-size: 0.9em;
font-family: Arial;
color: #62C916;
text-transform: uppercase;
margin: 0;
padding: 8px 0;
}
h3 {
font-size: 0.9em;
font-family: Arial;
margin: 0;
padding-bottom: 8px;
}
h4 {
font-size: 0.8em;
font-family: Arial;
color: #8CA1AA;
text-transform: uppercase;
margin: 0;
padding-bottom: 8px;
}
p {
margin: 0;
padding-bottom: 8px;
}
hr {
clear: both;
height: 1px;
border-top: solid 1px #AACCD5;
}
img {
border: none;
}
#wrapper {
margin: 0 auto;
width: 733px;
text-align: left;
height: 100%;
}
#head {
background-color: #F0F8FA;
height: 90px;
color: #606d82;
border-bottom: 1px solid #fff;
}
#head div {
float: left;
clear: right;
height: 65px;
}
#logo {
width: 185px;
}
#logo a {
display: block;
padding: 46px 0 0 14px;
font-size: 18px;
letter-spacing: 0;
text-transform: uppercase;
text-decoration: none;
}
#slogan {
width: 474px;
border-left: 1px solid #A2ADB9;
}
#slogan span {
display: block;
padding: 28px 0 0 14px;
font-size: 38px;
letter-spacing: -2px;
color: #91b3bc;
}
#toplinks {
width: 73px;
}
#toplinks ul {
margin: 0;
padding: 0;
list-style: none;
}
#toplinks li {
float: left;
display: inline;
margin-top: 56px;
}
#toplinks a {
display: block;
width: 18px;
height: 9px;
}
#toplinks span {
display: none;
}
#tl_home {
background-image: url(images/tl_home.gif);
background-repeat: no-repeat;
}
#tl_contact {
background-image: url(images/tl_contact.gif);
background-repeat: no-repeat;
}
#tl_sitemap {
background-image: url(images/tl_sitemap.gif);
background-repeat: no-repeat;
}
#tl_home a:hover {
background-image: url(images/tl_home-on.gif);
background-repeat: no-repeat;
}
#tl_contact a:hover {
background-image: url(images/tl_contact-on.gif);
background-repeat: no-repeat;
}
#tl_sitemap a:hover {
background-image: url(images/tl_sitemap-on.gif);
background-repeat: no-repeat;
}
#body {
float: right;
margin-top: 3px;
width: 548px;
clear: both;
}
#visual {
margin: 16px 0;
height: 166px;
background-image: url(images/visual.jpg);
background-repeat: no-repeat;
}
#content {
float: left;
padding-right: 14px;
width: 356px;
border-right: 1px solid #AACCD5;
}
#news {
margin-left: 380px;
width: 165px;
}
#news h4 {
padding-left: 14px;
background-image: url(images/li1b.gif);
background-repeat: no-repeat;
}
#news dl {
padding: 0;
margin: 0;
}
#news dt {
padding: 6px 10px 4px 10px;
margin: 0;
border-top: 1px solid #DEECF0;
background-image: url(images/li3.gif);
background-position: 0 11px;
background-repeat: no-repeat;
font-size: .7em;
color: #8CA1AA;
}
#news dd {
padding: 0;
margin: 0;
font-size: .8em;
}
#news h5 {
margin: 0;
padding-bottom: 2px;
font-size: 1.0em;
font-weight: normal;
}
#threecells {
clear: both;
}
#threecells div {
float: left;
font-size: .9em;
clear: right;
}
#threecells a {
display: block;
width: 162px;
height: 48px;
margin-bottom: 10px;
}
#threecells span {
display: none;
}
#cell_1 {
width: 162px;
padding-right: 15px;
}
#cell_1 a {
background-image: url(images/3colls_p1.jpg);
}
#cell_2 {
width: 162px;
padding: 0 15px 0 15px;
border-left: 1px solid #AACCD5;
border-right: 1px solid #AACCD5;
}
#cell_2 a {
background-image: url(images/3colls_p2.jpg);
}
#cell_3 {
width: 162px;
padding-left: 15px;
}
#cell_3 a {
background-image: url(images/3colls_p3.jpg);
}
#side {
padding-bottom: 8px;
border-top: 3px solid #fff;
width: 165px;
background-color: #EAF4F6;
height: 100%;
}
#menu {
padding: 0;
margin: 0;
}
#menu a {
text-decoration: none;
display:block;
}
#menu ul {
padding: 0;
margin: 0;
list-style: none;
}
#menu li {
margin: 0;
padding: 0;
font-size: 11px;
font-family: Arial;
}
#menu ul li a {
margin-top: 8px;
padding: 0 28px;
height: 21px;
line-height: 21px;
font-weight: bold;
text-transform: uppercase;
border-top: 1px solid #AACCD5;
border-bottom: 1px solid #AACCD5;
background-image: url(images/li1a.gif);
background-position: 13px 5px;
background-repeat: no-repeat;
}
#menu ul li ul li a {
margin-top: 0;
height:19px;
line-height: 19px;
font-weight:normal;
text-transform: capitalize;
background-image: url(images/li2.gif);
background-color: #DEECF0 ;
background-position: 13px 5px;
background-repeat: no-repeat;
border-top: 1px solid #EEF5F7;
border-bottom: 1px none #EEF5F7;
}
#menu ul li ul li ul li a {
background-color: #C2DCE3;
background-image: none;
}
#menu li li li li a {
padding-left: 36px;
}
#menu ul li ul li ul li ul li a {
background-color: #A1CEDB;
background-image: none;
}
#ads {
padding: 0;
margin: 0;
}
#ads dt {
padding: 0;
margin: 6px;
border-top: 1px solid #fff;
border-bottom: 1px solid #fff;
}
#ads dd {
margin: 0;
padding: 4px 12px;
border-bottom: 1px solid #EEF5F7;
font-size: .8em;
border-bottom: 1px solid #AACCD5;
line-height: 1.2em;
}
#foot {
clear: both;
padding: 1em;
background-color: #fff;
background-image: url(images/logo_small.gif);
background-repeat: no-repeat;
font-size: .8em;
line-height: 1.4em;
text-align: center;
position: relative;
}
#top_nav {
display: none;
padding-left: 185px;
background-color: #DEECF0;
height: 20px;
}
#top_nav ul {
margin: 0;
padding: 0;
list-style: none;
border-left: 1px solid #fff;
background-image: url(images/tn_bg1.gif);
background-position: right top;
background-repeat: no-repeat;
height: 20px;
}
#top_nav li {
float: left;
margin: 0;
padding: 0;
border-top: 2px solid #f60;
border-right: 1px solid #fff;
background-color: #E5F1F3;
}
#top_nav a {
display: block;
padding: 0 1.3em;
line-height: 18px;
font-family: Arial;
font-size: 11px;
font-weight: bold;
text-align: center;
text-decoration: none;
text-transform: uppercase;
}
#top_nav a:hover {
background-color: #f60;
color: #fff;
}

View file

@ -0,0 +1,119 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Mongrel: {title: }</title>
<link rel="stylesheet" href="{relocatable: default.css}" type="text/css" media=
"screen" />
<meta http-equiv="Content-Type" content=
"text/html; charset=us-ascii" />
</head>
<body>
<div id="wrapper">
<div id="head">
<div id="logo">
<a href="{relocatable: index.html}" title="Mongrel"><span>Mongrel</span></a>
</div>
<div id="slogan">
<span>Faster Is Possible</span>
</div>
<div id="toplinks">
<ul>
<li id="tl_home"><a href="/" title=
"Home"><span>Home</span></a></li>
<li id="tl_contact"><a href="http://rubyforge.org/project/memberlist.php?group_id=1306" title=
"Contact"><span>Contact</span></a></li>
<li id="tl_sitemap"><a href="{relocatable: sitemap.html}" title=
"Site map"><span>Site map</span></a></li>
</ul>
</div>
</div>
<div id="body">
<div id="visual"></div>
<div id="content">
{content: }
</div>
<div id="news">
<h4>NEWS</h4>
<dl>
<dt>2006-03-24</dt>
<dd>
<h5><a href="{relocatable: news.html}">Site now up!</a></h5>
<p>The new website is up and now running. <a href=
"{relocatable: news.html}"><img src="images/li4.gif" alt="more" /><br /></a></p>
</dd>
</dl>
</div>
<hr noshade="noshade" size="1" />
<div id="threecells">
</div>
</div>
<div id="side">
<div id="menu">
{menu: }
</div>
<dl id="ads">
<dt><a href="http://rubyforge.org/forum/?group_id=1306"><img src="images/side_p1.gif" alt=
"Sad Dog" /><br /></a></dt>
<dd>
<p>Mongrel making you sad? Why not say something?</p>
</dd>
<dt><a href="http://rubyforge.org/tracker/?atid=5145&group_id=1306&func=browse"><img src="images/side_p2.gif" alt="Bugs" /><br /></a></dt>
<dd>
<p>Found a bug? Well then report it already?!</p>
</dd>
<dt><a href="http://rubyforge.org/projects/mongrel/"><img src="images/side_p3.gif" alt=
"Tools" /><br /></a></dt>
<dd>
<p>Hit the project page for all sorts of other
goodies.</p>
</dd>
<dt>
<a href="http://rubyforge.org/project/memberlist.php?group_id=1306" title="Contact"><img src="images/3colls_p1.jpg" /></a><br /></a></dt>
<dd>
<p>Contact project people.</p>
</dd>
<dt><a href="{relocatable: documentation.html}" title="Documentation"><img src="images/3colls_p2.jpg" /></a><br /></a></dt>
<dd>
<p>Documentation galore.</p>
</dd>
<dt><a href="http://rubyforge.org/frs/?group_id=1306" title="Downloads"><img src="images/3colls_p3.jpg" /></a><br /></a></dt>
<dd>
<p>Grab new gear.</p>
</dd>
</dl>
</div>
<div id="foot">
Copyright &copy; 2006 <a href="http://www.zedshaw.com/">Zed A. Shaw</a><br />
<a href="{relocatable: attributions.html}">Additional contibutions and openly licensed
materials used.</a>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,24 @@
---
title: Documentation
inMenu: true
directoryName: Documentation
ordering: 3
---
h1. Available Documentation
h2. RDoc API Documentation
Check out the "RDoc":/rdoc/index.html documentation to get a look at the
API and dig into the source. Since Mongrel is currently being used by
other frameworks it's documentation is aimed at developers. Real manuals
will be written when there's something for "regular" folks to use.
h2. Frequently Asked Questions
When people ask questions really frequently the results end up in the
"FAQ":faq.html or if they're funny they end up in the "FASQ":fasq.html
so everyone can have a laugh.

39
doc/site/src/faq.page Normal file
View file

@ -0,0 +1,39 @@
---
title: FAQ
inMenu: true
directoryName: FAQ
ordering: 5
---
h1. FAQ
h2. Design
h3. Q: How is Mongrel designed?
The design of Mongrel most closely matches "Simple":http://simpleweb.sourceforge.net/
which is very nicely designed web server framework for Java. Despite being written
in Java it is very clean and simple, thus the name (clever eh?). The main difference
between Mongrel and Simple is that Simple monitors returned output from handlers so that
it can modify the results. Mongrel instead uses Ruby's blocks to get the same effect.
As for the internals of Mongrel there are a few key technologies being used:
* A custom HTTP 1.1 parser written based on the "RFC":http://www.w3.org/Protocols/rfc2616/rfc2616.html
standard and using "an ABNF dump":http://www.cs.columbia.edu/sip/syntax/rfc2068.html thankfully
put online by someone. The parser is written using "Ragel":http://www.elude.ca/ragel/ and
is written C as a Ruby extension.
* A URIClassifier that uses a "Ternary Search Trie":http://www.octavian.org/cs/software.html
written by Peter A. Friend and modified to quickly look up handlers for a URI based on
a prefix. This makes finding any handler from any URI quick and painless and is much
faster than the alternative of parsing the path and using nested Hash structures.
* A simple server that uses the parser and URIClassifier to process requests, find the
right handlers, and then pass the results on to the handler for processing.
* Handlers are responsible for using HttpRequest and HttpResponse objects to do their
thing and then return results.
Other than this there's not much more to it.

15
doc/site/src/fasq.page Normal file
View file

@ -0,0 +1,15 @@
---
title: FASQ
inMenu: false
directoryName: FASQ
---
h1. Frequently Asked Stupid Questions
Funny stupid questions people ask in classic "doh!" moments.
All questioner's identities are hidden to keep them from going
crazy on IRC.
Who will be the first? :-)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 B

BIN
doc/site/src/images/li2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 B

BIN
doc/site/src/images/li3.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 B

BIN
doc/site/src/images/li4.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

52
doc/site/src/index.page Normal file
View file

@ -0,0 +1,52 @@
---
title: Home
inMenu: false
directoryName: Home
odering: 1
---
h1. What is Mongrel?
Mongrel is a fast HTTP library and server for Ruby that is intended for
hosting Ruby web applications of any kind using plain HTTP rather than
FastCGI or SCGI. It is framework agnostic and already supports
Ruby On Rails, Og+Nitro, and Camping frameworks. By using
h2. Getting Started
The easiest way to get started with Mongrel is to install it via RubyGems
and then run a Ruby on Rails application. You can do this easily:
$ sudo gem install mongrel
$ cd myrailsapp
$ mongrel_rails start -d
Which runs Mongrel in the background. You can stop it with:
$ mongrel_rails stop
And you're all set.
h2. Performance
Mongrel's main competitor is WEBrick and "Tomcat":http://tomcat.apache.org/ but not
a full webserver like "Apache":http://httpd.apache.org/ or "lighttpd":http://www.lighttpd.net/
for serving static content. Mongrel is designed to run a web application with minimal
static content capabilities with the idea that you'll put it behind a webserver that's
faster for the static stuff.
So far Mongrel seems competitive with Tomcat and typically blows the doors off WEBrick.
Comparing Mongrel with Tomcat right now is not too fair since Tomcat does a whole lot
more, but for serving basic content mongrel does pretty good.
There will be a more formal performance analysis when Mongrel is more stable.
h2. Documentation
Check out the "RDoc":/rdoc/index.html documentation to get a look at the
API and dig into the source. Since Mongrel is currently being used by
other frameworks it's documentation is aimed at developers. Real manuals
will be written when there's something for "regular" folks to use.

17
doc/site/src/news.page Normal file
View file

@ -0,0 +1,17 @@
---
title: News
inMenu: true
directoryName: News
ordering: 2
---
h1. Latest News
h2. Feb-12: New site created.
This is kind of an experiment in seeing what type of site is possible
using just Creative Commons licensed content. See the "attributions":attributions.html
page for more information.

10
doc/site/src/sitemap.page Normal file
View file

@ -0,0 +1,10 @@
---
title: Sitemap
inMenu: true
directoryName: Sitemap
ordering: 4
---
h1. Sitemap
{sitemap: }

View file

@ -229,7 +229,7 @@ module Mongrel
# the socket in the proper order. This lets you intermix header and
# body content as needed.
def start(status=200)
@status = status
@status = status.to_i
yield @header, @body
finished
end
@ -242,7 +242,7 @@ module Mongrel
end
def send_status
@socket.write("HTTP/1.1 #{@status} #{HTTP_STATUS_CODES[@status]}\r\nContent-Length: #{@body.length}\r\nConnection: close\r\n")
@socket.write("HTTP/1.1 #{@status.to_i} #{HTTP_STATUS_CODES[@status.to_i]}\r\nContent-Length:#{body.length}\r\nConnection: close\r\n")
end
def send_header
@ -256,7 +256,7 @@ module Mongrel
# connection: close is also added to ensure that the client does not pipeline.
@socket.write(@body.read)
end
end
# This takes whatever has been done to header and body and then writes it in the
# proper format to make an HTTP/1.1 response.

View file

@ -75,8 +75,7 @@
# * Martin Chase <stillflame@FaerieMUD.org>
# * Michael Granger <ged@FaerieMUD.org>
#
#:include: COPYRIGHT
#
# modified temporarily by Zed A. Shaw until license attribution can be given.
#---
#
# Please see the file docs/COPYRIGHT for licensing details.