Jruby on Rails unicorn, nginx, cassandra

Hello everybody i’m Lelouch and i’m fairly new to jruby. I started to
use ruby on rails but then I discovered jruby and decided to learn it.

I’m a mac os x user.

So these four last days I tried to set up my environment : a jruby on
rails application using unicorn, nginx and cassandra.

So far, I succeeded to create a jruby on rails application using default
setup (webrick).

My question is : is it possible to use cassandra nginx and unicorn with
jruby on rails ? if so could you give me some help ? I crawled the web
but nothing worked up till now…

I had some trouble with unicorn as it appears it’s not fully supported
by jruby… Nginx is an issue too because i didn’t find any tutorial on
mac os x.

If someone as some time to help.

Thanks.

Lelouch

On Wed, Jul 18, 2012 at 3:49 PM, Jake L. [email protected] wrote:

So these four last days I tried to set up my environment : a jruby on
rails application using unicorn, nginx and cassandra.

So far, I succeeded to create a jruby on rails application using default
setup (webrick).

My question is : is it possible to use cassandra nginx and unicorn with
jruby on rails ?

I had some trouble with unicorn as it appears it’s not fully supported
by jruby… Nginx is an issue too because i didn’t find any tutorial on
mac os x.

I doubt you can run Unicorn under jruby, though I don’t have time to
try it right now. Use the Trinidad (embedded Tomcat) gem instead.
(I do use Unicorn for my MRI/REE apps.)

Cassandra - I played briefly with this after attending a Netflix meetup
a couple months ago, but my impression was that the state of gems
for using it with Ruby in general was a bit of a mess. That might have
changed, so let us know how it goes :slight_smile:

Nginx - what do you need to know? It installed fine on my Mac (10.7.4)
and as far as I can tell there aren’t any OS-specific issues. What are
you having trouble with?


Hassan S. ------------------------ [email protected]

twitter: @hassan

I have heard of people getting Unicorn working with JRuby, but the
bottom line is that you simply don’t need it. Unicorn (and Passenger)
solve a problem that JRuby does not have: a lack of concurrency.

The job of Unicorn is to manage a bunch of processes, because that’s the
only way to parallelize request processing on MRI. JRuby is
multithreaded, so you can parallelize with a single process. For this
reason, a new set of web servers has emerged. The leaders are:
TorqueBox
Trinidad
Mizuno
Puma

All of these should work with Nginx (although TorqueBox and Trinidad
have some really nice “plugins” that make them work better with Apache).

<Warning: shameless self promotion>
I wrote a book on this subject. You might find useful.

However, it is directed to folks who are already using Ruby and/or
Rails, so I’m not sure exactly how well it will suit you.

-Joe

On Jul 18, 2012, at 8:02 PM, Joe K. wrote:

I have heard of people getting Unicorn working with JRuby, but the bottom line
is that you simply don’t need it. Unicorn (and Passenger) solve a problem that
JRuby does not have: a lack of concurrency.

Another thing is zero-downtime redeploys. We deploy our Rails apps into
Tomcat but we use a load balancer in front of multiple Tomcat servers,
instead of attempting live hot deploys because we’ve found it
burdensome/risky to prevent hot-deploy related memory leaks.

http://wiki.apache.org/tomcat/MemoryLeakProtection

Basically updates for us involve taking a server out of the loop,
updating it, and putting it back in. We have to manage timing issues
like not putting a Tomcat server back in the loop until it is fully
started, which can take a while. Typically with Passenger or Unicorn,
that stuff is already worked out.

I’ve been meaning to check out other options, but I suspect TorqueBox
and Trinidad would have the same issues. It’s probably more of an issue
for us than others since we integrate with a lot of legacy native java
libraries.

-lenny

On Jul 19, 2012, at 5:13 PM, Jake L. wrote:

<Warning: shameless self promotion>
updating it, and putting it back in. We have to manage timing issues
like not putting a Tomcat server back in the loop until it is fully
started, which can take a while. Typically with Passenger or Unicorn,
that stuff is already worked out.

So for you unicorn is worth a shot when you have multiple servers ?

Unicorn might be nice if it could prevent us from needing multiple
servers. I guess if we had an extremely high traffic site that needed to
be scaled out horizontally to multiple hosts, we would still need to be
doing the same adding and removing of servers from the load balancer
loop. However, a single Tomcat server would be more than enough for us
if we trusted we could reliably hot-redeploy our WARs. The Unicorn
forking model could conceivably eliminate our class loader related
memory leak problems. Seems like a long shot though, due to Unicorns
reliance on fork. Unless you’re looking to break new ground, I’m sure
one of the previously mentioned deployment options would come more
naturally. Even for us with all our native java code, one of those
solutions might work out. The hot redeploy problems* have just been a
historical issue, especially with older versions of Tomcat going way
back before we even introduced JRuby.

-lenny

Hassan S. wrote in post #1069246:

Nginx - what do you need to know? It installed fine on my Mac (10.7.4)
and as far as I can tell there aren’t any OS-specific issues. What are
you having trouble with?

Well I installed it easily on my mac but I have some trouble to set a
virtual host working with a rails application. But i’ll try again.

Thanks for your reply.

Joe K. wrote in post #1069247:

I have heard of people getting Unicorn working with JRuby, but the
bottom line is that you simply don’t need it. Unicorn (and Passenger)
solve a problem that JRuby does not have: a lack of concurrency.

Well from that point of view … I think you’re right so i might try
Mizuno thanks !

<Warning: shameless self promotion>
I wrote a book on this subject. You might find useful.
Search

I shall give it a try ! Thanks for your help !

Lenny M. wrote in post #1069358:

On Jul 18, 2012, at 8:02 PM, Joe K. wrote:

Basically updates for us involve taking a server out of the loop,
updating it, and putting it back in. We have to manage timing issues
like not putting a Tomcat server back in the loop until it is fully
started, which can take a while. Typically with Passenger or Unicorn,
that stuff is already worked out.

So for you unicorn is worth a shot when you have multiple servers ?

Thanks for all your replies, I learn a lot !

Ok thank you Lenny. I’ll try Eurydice too Theo thanks !

For Cassandra, try Eurydice: GitHub - iconara/eurydice: Cassandra client for JRuby built on top of Pelops

It’s built on top of a Java library, and in my experience (I am also its
author) very stable and performant. The cassandra gem doesn’t work
because the thrift gem that it depends on is broken in .

T#