It’s a pleasure for me to join your community mailing list. I am a
keen software engineer and experimenter, and happen to investigate and
dive into the Ruby language from a couple of weeks. So far i have
become familiar with the basics of the syntax and semantics of the
language, and, of course, i would like to get to know the Ruby web
application framework Rails too. But i enjoy understanding the
principles which a software platform relies on, so i would kindly like
to ask you some questions about the architecture of the Rails
framework that i couldn’t find by googling , and would highly
appreciate your comments and answers.
Since i come from the JavaSE and JavaEE world, its inevitable for me
to try to use the analogy principles between Ruby and Java. In JavaSE
we write standalone applications, which we execute over a JVM. In
JavaEE we can write web applications, which require a JavaEE web
server and container to be deployed in (and of course, underlying the
container there is a JVM).
In the classical Ruby scenario, we write standalone applications,
which we run on Ruby VM (there are a lot of VMs, implemented in
different languages). But when it comes to writing Ruby web
applications on Rails, we need some more sophisticated execution
environment, such as a Rails web server - WEBrick, Mongrel, etc. Am i
already getting it wrong ? Are WEBrick, Mongrel the Ruby analogies of
a JavaEE application server, or they are actually something completely
Google says that Mongrel is a web server, but isn’t Mongrel also
executing Ruby code ?
It seems that to execute a Rails application, one needs a Ruby VM and
a Ruby web server (and of course, the Rails framework itself
installed). But where is the application code executed - directly in
the Ruby VM, or inside the Ruby web server (as is in JavaEE: servlets/
JSPs are executed inside the web container) ? That means, what exactly
is a Ruby web server doing in the whole picture ? Is it just
dispatching HTTP requests to Ruby classes to handle them, i.e. it is
only a mediator ? Or is it executing the application code, just like a
web container that executes servlet code ?
I would highly appreciate any guidance on this, since so far i cannot
answer these questions.