# Mongrel HTTP Library 0.2.2 (Serving Directories)

**URL:** <https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825>\
**Category:** Ruby\
**Created:** [February 3, 2006, 8:24am UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825 "2006-02-03T08:24:58Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Zed\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/da6949/32.png) [@Zed\_S](https://www.ruby-forum.com/u/Zed_S)\
**Post date:** [February 3, 2006, 8:24am UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825/1 "2006-02-03T08:24:58Z")

</div>

Hey Folks,

Another announcement of Mongrel – the fastest little web server  
library for Ruby yet. This release is nice in that it should build  
on win32 better and it now sports a small DirHandler that can serve  
directories and files. This means Mongrel is closer to replacing  
WEBrick as a Rails debug runner.

You can get the releases and information from:

- [http://rubyforge.org/projects/mongrel/](http://rubyforge.org/projects/mongrel/) – project page
- [http://mongrel.rubyforge.org/](http://mongrel.rubyforge.org/) – RDoc documentation.

== Install and Upgrade

People who use(d) RubyGems can simply do:

gem install mongrel

-or-

gem upgrade

And they’ll get the new gear. You can go back to the project page  
and download the source .tgz if you installed using that.

== Changes

- Fixed a header so that win32 folks can build it.
- Added all CGI parameters that didn’t cause security or performance  
problems.
- Forced the sockets to not do reverse name lookup (huge performance  
hit for little benefit).
- Created a REQUEST\_URI parameter that has the original untouched URI  
used in the request. This is the string used to lookup the handlers  
and create the SCRIPT\_NAME and PATH\_INFO parameters.
- Implemented a basic directory serving handler called DirHandler.  
It will serve files in a directory, print a simple directory listing,  
and tries to protect against malicious path requests.
- Some minor code clean-ups and additional documentation regarding  
constants used.

== The DirHandler

The really simple DirHandler is used like this (from the examples/  
simpletest.rb file):

h = Mongrel::HttpServer.new(“0.0.0.0”, “3000”)  
h.register(“/files”, Mongrel::DirHandler.new(“.”))  
h.run.join

This simply sets things up so that when people go to /files, they get  
the contents of the current directory. The DirHandler expands the  
path you give it so that when requests come in, it can expand them  
too and make sure that both paths have the same prefix. If not it  
will reject them. There is also an option to turn off the directory  
listings using the second parameter to DirHandler.new().

This initial file serving is very simplistic since it doesn’t map  
extensions to mime types yet. It should be a good start for some  
people though.

== Feedback

Thanks for all the feedback and bug reports so far. With directory  
serving and complete CGI parameters out of the way I’m going to start  
working on a Rails runner using Mongrel next, and possibly a caching  
system. Goal for the weekend will be to get a Rails application  
running in Mongrel standalone.

Enjoy!

Zed A. Shaw

> **[Zed A. shaw](https://zedshaw.com/)**
>
> Personal essays and writings by Zed A. Shaw.

---

<div class="post-metadata">

**Author:** ![Zed\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/da6949/32.png) [@Zed\_S](https://www.ruby-forum.com/u/Zed_S)\
**Post date:** [February 3, 2006, 3:39pm UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825/2 "2006-02-03T15:39:14Z")

</div>

On 2/3/06, Zed S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> - Forced the sockets to not do reverse name lookup (huge performance  
> == The DirHandler  
> path you give it so that when requests come in, it can expand them

Like Daniel S. in the previous version I’m getting errors when  
attempting the following on windows:

irb(main):001:0\> require\_gem ‘mongrel’  
=\> true  
irb(main):002:0\> p Mongrel  
NameError: uninitialized constant Mongrel  
from (irb):2  
irb(main):003:0\>

Looking at the gem install itself, everything seems to have been created  
correctly. I have a mongrel.rb in mongrel’s lib dir, just can’t seem to  
get  
it to actually LOAD correctly. Any help would be great.

---

<div class="post-metadata">

**Author:** ![Zed\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/da6949/32.png) [@Zed\_S](https://www.ruby-forum.com/u/Zed_S)\
**Post date:** [February 3, 2006, 3:42pm UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825/3 "2006-02-03T15:42:18Z")

</div>

On 2/3/06, Tanner B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > directories and files. This means Mongrel is closer to replacing
> > 
> > and tries to protect against malicious path requests.  
> > h.run.join  
> > people though.  
> > Enjoy!  
> > irb(main):001:0\> require\_gem ‘mongrel’

Sorry for the double post, but as it turns out I get an Identical error  
on  
my Debian box as well, so something in the install seems to be a bit  
fubar’d.

---

<div class="post-metadata">

**Author:** ![Zed\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/da6949/32.png) [@Zed\_S](https://www.ruby-forum.com/u/Zed_S)\
**Post date:** [February 3, 2006, 4:00pm UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825/4 "2006-02-03T16:00:25Z")

</div>

Did you make sure to require rubygems first? Here’s my install:

[zedshaw@dinky ~]$ irb -rubygems  
irb(main):001:0\> require ‘mongrel’  
=\> true  
irb(main):002:0\>  
[zedshaw@dinky ~]$  
irb(main):001:0\> require ‘rubygems’  
=\> true  
irb(main):002:0\> require ‘mongrel’  
=\> true  
[zedshaw@dinky ~]$ irb  
irb(main):001:0\> require ‘mongrel’  
LoadError: no such file to load – http11  
from ./mongrel.rb:2:in `require’  
from ./mongrel.rb:2  
from (irb):1  
irb(main):002:0\>

If you do irb -rubygems then it works. If you require ‘rubygems’ first  
it  
works. If you do neither it blows up.

Let me know if that fixes it for you.

Zed A. Shaw

> **[Zed A. shaw](https://zedshaw.com/)**
>
> Personal essays and writings by Zed A. Shaw.

---

<div class="post-metadata">

**Author:** ![Zed\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/da6949/32.png) [@Zed\_S](https://www.ruby-forum.com/u/Zed_S)\
**Post date:** [February 3, 2006, 4:09pm UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825/5 "2006-02-03T16:09:32Z")

</div>

On 2/3/06, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> irb(main):002:0\> require ‘mongrel’  
> works. If you do neither it blows up.
> 
> Let me know if that fixes it for you.
> 
> Zed A. Shaw  
> [http://www.zedshaw.com/](http://www.zedshaw.com/)

Nope, different error now. (Other gems work just fine, so I don’t think  
it’s my gem install)

irb(main):001:0\> require ‘rubygems’  
=\> true  
irb(main):002:0\> require ‘mongrel’  
NameError: uninitialized constant Mongrel  
from ./mongrel.rb:4  
from  
/usr/local/lib/ruby/site\_ruby/1.8/rubygems/custom\_require.rb:21:in  
`require’  
from (irb):2  
irb(main):003:0\>

---

<div class="post-metadata">

**Author:** ![Zed\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/da6949/32.png) [@Zed\_S](https://www.ruby-forum.com/u/Zed_S)\
**Post date:** [February 3, 2006, 4:24pm UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825/6 "2006-02-03T16:24:43Z")

</div>

> - Fixed a header so that win32 folks can build it.

What do I need to try to build it on win32? Can someone point me to the  
right compiler?

-Sascha E.

---

<div class="post-metadata">

**Author:** ![Zed\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/da6949/32.png) [@Zed\_S](https://www.ruby-forum.com/u/Zed_S)\
**Post date:** [February 3, 2006, 10:39pm UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825/7 "2006-02-03T22:39:07Z")

</div>

> On 2/3/06, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > Did you make sure to require rubygems first? Here’s my install:

> `require’  
> from (irb):2  
> irb(main):003:0\>

Are you sure that you don’t have any previous versions of Mongrel  
installed via source? Or is ./mongrel.rb a file you’re working on  
that’s  
getting loaded when you do require? The reason I ask is “from  
./mongrel.rb:4” means that you’re trying to use Mongrel modules at line  
4.  
When I look at line 4 of the mongrel.rb library it’s a “require  
‘stringio’” line. So, that error has to be coming from somewhere else.

Make sure you can identify all the “mongrel.rb” files on your system and  
that you’re not loading the wrong one on accident.

Zed A. Shaw

> **[Zed A. shaw](https://zedshaw.com/)**
>
> Personal essays and writings by Zed A. Shaw.

---

<div class="post-metadata">

**Author:** ![Zed\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/da6949/32.png) [@Zed\_S](https://www.ruby-forum.com/u/Zed_S)\
**Post date:** [February 3, 2006, 5:00pm UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825/8 "2006-02-03T17:00:56Z")

</div>

Sascha E. wrote:

> > - Fixed a header so that win32 folks can build it.
> 
> What do I need to try to build it on win32? Can someone point me to the  
> right compiler?
> 
> -Sascha E.

Microsoft Visual C++ Toolkit 2003

> **[Microsoft Learn: Build skills that open doors in your career](https://learn.microsoft.com/en-us/)**
>
> Gain technical skills through documentation and training, earn certifications and connect with the community

---

<div class="post-metadata">

**Author:** ![Zed\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/da6949/32.png) [@Zed\_S](https://www.ruby-forum.com/u/Zed_S)\
**Post date:** [February 6, 2006, 4:33pm UTC](https://www.ruby-forum.com/t/mongrel-http-library-0-2-2-serving-directories/102825/9 "2006-02-06T16:33:14Z")

</div>

On 2/3/06, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > =\> true  
> > installed via source? Or is ./mongrel.rb a file you’re working on that’s  
> > getting loaded when you do require? The reason I ask is “from  
> > ./mongrel.rb:4” means that you’re trying to use Mongrel modules at line 4.  
> > When I look at line 4 of the mongrel.rb library it’s a “require  
> > ‘stringio’” line. So, that error has to be coming from somewhere else.
> 
> Make sure you can identify all the “mongrel.rb” files on your system and  
> that you’re not loading the wrong one on accident.

Hah, interesting side note. Don’t name the test file mongrel.rb when  
attempting to test a file with a library named mongrel.rb. Well that  
was an  
interesting bug to track down. Thanks

Zed A. Shaw
