Forum: Ruby Rails and J2EE middleware (threading/servers)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
8396048b39279996e7ee6c1acdac2bf7?d=identicon&s=25 Berlin Brown (Guest)
on 2006-03-15 20:56
(Received via mailing list)
A lot of applications have a middleware layer.  In some ways,
ActiveRecord or Mailer is thought of as a middleware.

But, for example with J2EE, you can run background servers and threads.
 Can this be done with Ruby and how?
F0223b1193ecc3a935ce41a1edd72e42?d=identicon&s=25 zdennis (Guest)
on 2006-03-15 21:09
(Received via mailing list)
Berlin Brown wrote:
> A lot of applications have a middleware layer.  In some ways,
> ActiveRecord or Mailer is thought of as a middleware.
>
> But, for example with J2EE, you can run background servers and threads.
>  Can this be done with Ruby and how?
>

I take the code I need to run separate from rails and set it up as a
system daemon. I put all of these in my lib/standalone/
directory. Example:

/var/www/myapp/lib/standalone/report_generator

/etc/init.d/report_generator start|stop|restart

My rails app communications via Unix sockets to my report_generator.

Zach
8396048b39279996e7ee6c1acdac2bf7?d=identicon&s=25 Berlin Brown (Guest)
on 2006-03-15 22:56
(Received via mailing list)
That is interesting.  I like that approach.  How does the ruby client
code work.  Basically, does it timeout or cause a lot of issues.
F0223b1193ecc3a935ce41a1edd72e42?d=identicon&s=25 zdennis (Guest)
on 2006-03-24 00:36
(Received via mailing list)
Berlin Brown wrote:
> That is interesting.  I like that approach.  How does the ruby client
> code work.

The client just opens a Socket connection to the server, and sends it
instructions. The server takes the instructions, and the
server process creates a new thread and does whatever it needs to do
based on instructions. We make the following assumption:
 * the server knows how to parse basic instructions so it can load the
correct library/worker and pass on worker-specific
instructions to it
 * the client understands the format of instructions

> Basically, does it timeout or cause a lot of issues.

A handful of times it was reported that it didn't correctly generate the
report for the end user, however, it was hit half a
million times in about 2 weeks and it's hard to prove a handful of times
something not working. Although I am investigating. =)

The biggest issue we've seen is memory consumption. We use this tactic
for generating CSV reports from a database. Some CSV
reports which include 45,000 or greater (upward of 275,000) records can
really suck up the memory. We have avoided this as being a
 huge problem by doing two things:
 1. beefing up server memory
 2. restarting our worker processes (and daemon processes) periodically
if memory consumption gets way to high.

There are some changes I am making to my system to fix these initial
issues, if interested contact me off list...

Zach
This topic is locked and can not be replied to.