[Mongrel] Getting started on win32 - without Rails.

cdr _ at whats-your.name
Mon Oct 1 11:23:09 EDT 2007


> My mindset comes from PHP/JSP-type languages where you embed code into
> HTML. It seems the way to do this with ruby is to use Apache + mod_ruby
> + eruby. It also seems this is not the preferred way to do things. (Right?)

its not the 'Rails' way of doing things[1], but its a way that will be alive as long as the web. even new projects, such as IBM's Project Zero "focused on the agile development of the next generation of dynamic Web applications" take this approach with a directory containing more or less one PHP file for each resource class, organized by HTTP path..

[1] the Rails way is to use synthetic URLs, and Ruby code to map those to ActiveRecord objects, which reside in SQL tables. Merb, Iowa also share similar paradigm..

you can adjust the GET method below to do something like:

path = PathName.new('./resources/'+r.params["REQUEST_PATH"])

(path.exist && path.extname.match(/\.mab$/) && MarkabyHandler || Mongrel::DirHandler).new(Path).process(r,re)

MarkabyHandler is an exercise to you. i'd do (Templates[path] ||= eval("lambda{"+path.read+"}")).call or similar to reuse (memoize) the parsed file..

of course you could make a controllers/ dir to match resources (renaming that to views), consolidating both to only have a file per controller/view per resource class [2], etc.. Mongrel lets you build up exactly what you need, instead of what framework authors think you need.

[2] Mongrel facilitates this due to a feature of its URIClassifier. '/trinkets/3' will actually match a '/trinkets' registry. afaik you can even get the 'excess' portion of the match so you dont need to do regex of your own (it returns 3 results on a lookup). forget the details as its been a couple months since i dug into the URIClassifier code.


> So: How can I get a simple hello world webpage running from Mongrel,
> without any framework?

setup a configurator line and a class to match, eg:

#!/usr/bin/env ruby
Path=File.dirname __FILE__
%w{rubygems markaby mongrel}.each{|r|require r}

class Resource < Mongrel::HttpHandler
  def GET r,e
    e.start{|h,o| o.write "hello world"}
  end
  def process r,e
    send r.params["REQUEST_METHOD"], r, e
  end
end

if __FILE__== $0
  Mongrel::Configurator.new :host => (ARGV[0] || "0.0.0.0") do
    listener :port => (ARGV[1] || 80) do
      uri '/', :handler => Resource.new
      run
    end
  end.join
end


cheers, and welcome to Mongrel land - where all the animals are ugly

> 
> -Lars
> _______________________________________________
> Mongrel-users mailing list
> Mongrel-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/mongrel-users


More information about the Mongrel-users mailing list