Stability of Rails

The http://yakimaherald.com/ website has been running since July 2005 on rails first on lighttpd/fcgi and now on apache2.2/mod_proxy_balancer/mongrel_cluster and it runs for months at a time without restarts.

Cheers-
-Ezra

There actually are three remaining stability bugs in Mongrel that hit
some folks:

* LEAK: A slow memory leak when the site is hit with enough requests to
trigger a leak that shows up in Ruby thread locking. This bug is fixed
in the latest pre-release for POSIX systems, but not win32.

* CLOSE_WAIT: Excessive numbers of sockets in CLOSE_WAIT state that
cause a Mongrel process to stop answering requests. This appears to hit
people who are behind Apache most, and especially those who are having
Mongrel serve files. It also seems to be rare, but you can test it by
running: lsof -i -P | grep CLOSE_WAIT and looking to see if they never
go down.

* 99% CPU: After running for a while, a Mongrel process will just eat
CPU like crazy. This so far is rare and I can't replicate this so I'm
looking for people who have this happen and can let me onto their
computer to look at the process when it happens.

I'm currently working with people who have these problems, and hopefully
will have it solved soon. If you are seeing these issues then please
contact me so I can give you special builds of Mongrel and have you run
a debugging process for me.

Otherwise, very few people have reported these problems and the majority
of them are doing strange things like accessing legacy databases.

Yo EZ,

Have a good tutorial on getting mongrel/apache running on a Debian server?

Well you will ant to compile apache2.2.3 yourself. If you are anal about debian packaging then use chkinstall to do it so it will be packaged into a .deb as well. But here are the good config flags for a nice slim apache2.2.3/mod_proxy_balancer setup. the mongrel cluster part is easy once you get apache compiled and a good vhost set up.

Here's a good vhost:

http://brainspl.at/articles/2006/06/12/apache2-2-vhost-template-for-mongrel-clusters

configure flags for compiling a skinny apache:

./configure \
    --with-mpm=worker \
    --with-ssl \
    --enable-alias \
    --enable-cache \
    --enable-auth-basic \
    --enable-auth-digest \
    --enable-authn-anon \
    --enable-authn-default \
    --enable-authn-file \
    --enable-authz-default \
    --enable-authz-host \
    --enable-authz-user \
    --enable-dir \
    --enable-disk-cache \
    --enable-expires \
    --enable-mime \
    --enable-mem-cache \
    --enable-negotiation \
    --enable-deflate \
    --enable-http \
    --enable-headers \
    --enable-include \
    --enable-log-config \
    --enable-proxy \
    --enable-proxy-balancer \
    --enable-proxy-http \
    --enable-rewrite \
    --enable-setenvif \
    --enable-so \
    --enable-ssl \
    --enable-threads \
    --disable-actions \
    --disable-asis \
    --disable-authn-alias \
    --disable-authn-dbd \
    --disable-authn-dbm \
    --disable-authz-dbm \
    --disable-authz-groupfile \
    --disable-authz-ldap \
    --disable-authz-owner \
    --disable-autoindex \
    --disable-bucketeer \
    --disable-case-filter \
    --disable-case-filter-in \
    --disable-cern-meta \
    --disable-cgi \
    --disable-cgid \
    --disable-charset-lite \
    --disable-dav \
    --disable-dav-ds \
    --disable-dav-lock \
    --disable-distcache \
    --disable-dbd \
    --disable-dumpio \
    --disable-echo \
    --disable-env \
    --disable-example \
    --disable-ext-filter \
    --disable-file-cache \
    --disable-filter \
    --disable-index \
    --disable-indent \
    --disable-imagemap \
    --disable-imap \
    --disable-info \
    --disable-isapi \
    --disable-ldap \
    --disable-log-forensic \
    --disable-logio \
    --disable-mime-magic \
    --disable-nw-ssl \
    --disable-optional-fn-export \
    --disable-optional-fn-import \
    --disable-optional-hook-export \
    --disable-optional-hook-import \
    --disable-proxy-ajp \
    --disable-proxy-connect \
    --disable-proxy-ftp \
    --disable-speling \
    --disable-status \
    --disable-suexec \
    --disable-unique-id \
    --disable-userdir \
    --disable-usertrack \
    --disable-version \
    --disable-vhost-alias

Cheers-
-Ezra

The main problem I ran into with Debian is that ruby 1.8.2 is the standard. I’m guessing I’d have to recompile 1.8.4, then ImageMagick, and everything else (along with Apache) right?

Yes. Or upgrade to testing instead of sarge and you can get ruby1.8.4 and imagemagick and all that stuff thru apt. Or if you have to stay on sarge you can use apt-pinning to pin ruby1.8.4 from testing back into sarge. Or there is always backports too.

I am still debating how I am going to reccomend installing ruby on the debian server I walk you thru installing in my book. I might just have people install ruby and friends from source and use chkinstall to install them as .deb's.

-Ezra