From: Charles Oliver Nutter Date: 2009-04-26T00:12:48+09:00 Subject: Re: Running JRuby behind an Apache server Robert Klemme wrote: > No no, I meant, using Tomcat, Jetty or the like with JRuby. Sorry, the > question was definitively not precise enough. Well, they both work great as far as I know. In Tomcat's case, you would use Warbler to package up your app as a .war file and then deploy that. I believe Jetty can work the same way, though there's also a jetty_rails gem that's similar to the glassfish gem. > Erm, what do you mean by that? With a proper configuration and JRuby's > libraries deployed starting Tomcat should be enough. What am I missing? Well, managing a Tomcat instance isn't as simple as just running one command. With JRuby you have exactly *one* process for your whole app, and if you can run Rails with config.threadsafe! enabled, you have exactly *one* JRuby instance within that process. Just about as easy as it gets. Maybe it's worth showing the steps to run JRuby behind Apache here: Prerequisites: 1. Apache with mod_proxy_http enabled (sudo a2enmod proxy_http on Ubuntu). Every default apache I know ships with mod_proxy_http. 2. Java (on Debian/Ubuntu)sudo apt-get install sun-java6-jdk or the openjdk flavors if you like) 3. JRuby (download, unpack, put bin/ in PATH) 4. gems appropriate to run your app with JRuby (e.g. rails, activerecord-jdbcsqlite3-adapter, etc) 5. production DB all set to go Once you have that, the remaining set up is trivial: 1. Install the glassfish gem (or you can use Mongrel too...see my post): gem install glassfish 2. From your application directory, run glassfish with these options: glassfish -p -e production -c -d 3. Add ProxyPass and ProxyPassReverse lines to Apache (whereever is appropriate on your system) for the GlassFish server instance. For example, if is 9000 and is foo: ProxyPass /foo http://localhost:9000/foo ProxyPassReverse /foo http://localhost:9000/foo 4. Reload Apache config, however is appropriate for your system That's it! - Charlie