Forum: Ruby Running JRuby behind an Apache server

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.
Charles Oliver N. (Guest)
on 2009-04-25 18:18
(Received via mailing list)
In case anyone's interested, I've started a simple HOWTO blog post for
serving up JRuby + {Rails,Merb,etc} if you already have an Apache server
(which I suspect is a typical setup for most folks serving Rails and
friends):

http://blog.headius.com/2009/04/apache-jruby-rails...

I'm no Apache expert, so I'd really love suggestions, but basically it's
as simple as running the app in JRuby (using GlassFish gem or Mongrel or
whatever) and setting up Apache to proxy to it. JRuby side will handle
all requests thrown at it.

- Charlie
Robert K. (Guest)
on 2009-04-25 18:26
(Received via mailing list)
On 25.04.2009 16:14, Charles Oliver N. wrote:
> all requests thrown at it.
Do you have any experience with integration in Java based webservers
(Tomcat, Jetty and the like)?

Cheers

  robert
Charles Oliver N. (Guest)
on 2009-04-25 18:44
(Received via mailing list)
Robert K. wrote:
>> Mongrel or whatever) and setting up Apache to proxy to it. JRuby side
>> will handle all requests thrown at it.
>
> Do you have any experience with integration in Java based webservers
> (Tomcat, Jetty and the like)?

For Apache? Yeah, there's what used to be called mod_jk, which I believe
is now mod_proxy_ajp. ajp is a faster-than-proxy protocol that compacts
the request and response to speed it up. For something on localhost,
however, I doubt it would make much difference for performance to use
mod_proxy_ajp instead of mod_proxy_http.

But yeah, if you wanted to set up a full-on Tomcat or GlassFish or
whatever server, you could use the proxy_http or proxy_ajp setup just as
easily. But I think most people would prefer a single command to run the
server process over something like Tomcat.

- Charlie
Robert K. (Guest)
on 2009-04-25 18:56
(Received via mailing list)
On 25.04.2009 16:43, Charles Oliver N. wrote:
>>> it's as simple as running the app in JRuby (using GlassFish gem or
>>> Mongrel or whatever) and setting up Apache to proxy to it. JRuby side
>>> will handle all requests thrown at it.
>> Do you have any experience with integration in Java based webservers
>> (Tomcat, Jetty and the like)?
>
> For Apache? Yeah, there's what used to be called mod_jk, which I believe
> is now mod_proxy_ajp. ajp is a faster-than-proxy protocol that compacts
> the request and response to speed it up. For something on localhost,
> however, I doubt it would make much difference for performance to use
> mod_proxy_ajp instead of mod_proxy_http.

No no, I meant, using Tomcat, Jetty or the like with JRuby.  Sorry, the
question was definitively not precise enough.

> But yeah, if you wanted to set up a full-on Tomcat or GlassFish or
> whatever server, you could use the proxy_http or proxy_ajp setup just as
> easily. But I think most people would prefer a single command to run the
> server process over something like Tomcat.

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?

Kind regards

  robert
Charles Oliver N. (Guest)
on 2009-04-25 19:13
(Received via mailing list)
Robert K. 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 <port> -e production -c <context> -d

3. Add ProxyPass and ProxyPassReverse lines to Apache (whereever is
appropriate on your system) for the GlassFish server instance. For
example, if <port> is 9000 and <context> 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
This topic is locked and can not be replied to.