> 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@rubyforge.org
> http://rubyforge.org/mailman/listinfo/mongrel-users
_______________________________________________
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users

Reply via email to