80683

JRuby deployment options that support multiple versions of JRuby

Question:

I'm looking for a way to deploy multiple JRuby apps on a single server, the apps are in different stages and hence use different versions of JRuby, in the long term it would be pretty complicated to try and sync all of the applications with all of the application servers, so I'm looking something akin to Phusion Passenger 4 in the Javaland.

Apparently Passenger allows something like this, but there's no documentation available how such a setup should work. Torquebox doesn't mention this use case in their docs.

Bonus points for:

<ol><li>solutions that allow git pull deployment</li> <li>solutions that are rvm friendly</li> <li>solutions that are not Tomcat based</li> <li>solutions that are clustering friendly</li> <li>solutions that handle daemonization, routing, resource management and monitoring on their own</li> <li>solutions that are mature and actively supported</li> </ol>

So far everything I've looked at failed on some of the points, torquebox doesn't seem to support multiple jruby versions, trinidad is tomcat, puma requires some of hand-holding (process monitoring, reverse proxy, ....) etc

Answer1:

probably your best choice would be to do it the "Java-way" using <a href="https://github.com/jruby/warbler" rel="nofollow">https://github.com/jruby/warbler</a>

you'll end up with a .war that packs the JRuby's jars in the archive thus each app will have it's own version of JRuby. this of course requires you to setup a Java application server (such as Tomcat), the deployment process would usually mean copying the packaged .war into the server's deployment folder.

be aware that this will likely require a lot of memory since none of the libraries JRuby uses will be shared (also with some servers you need to make sure the class-loader does look at the war's jars first during a specific deployment configuration option)

Answer2:

In the end I opted for a reverse proxy + puma + a process monitoring tool, but it feels like this <em>must</em> be simpler somehow - without three distinct pieces of software working together to make it happen.

Pros are that it's rvm compatible, can support multiple rubies through multiple puma processes and allows git pull deployments

There's also <a href="https://github.com/square/jetpack" rel="nofollow">jetpack</a> as an alternative, but I haven't had a chance to play with it

Recommend

  • How to compute accuracy for cluster evaluation in Weka
  • Order by AND LIKE in Same Cassandra Query
  • How to calculate clustering entropy - example and my solution given but is it correct? [closed]
  • installing python igraph anaconda on mac
  • Embedding dendrogram in Java
  • Clustering F/OSS Library for .NET
  • KMeans|| for sentiment analysis on Spark
  • Removing certain values from the dataframe in R
  • How to store a numpy arrays in a column of a Pandas dataframe?
  • designing new table for daily uploads - use unique constraint
  • understanding how a primary key works & how to use it
  • I want to calculate each column's sample deviation in data
  • How to make a XMPP client in a container like tomcat?
  • Carrot2 workbench not able to process large data
  • MYSQL Long super-keys
  • Ejabberd clustering chat not working
  • Fuzzy c-means tcp dump clustering in matlab
  • Sorting order in cassandra result
  • Quartz Job Scheduler - Multi-Tenant Setup
  • String Distance Matrix in Python
  • BigQuery - Clustered tables not reducing query size with multiple keys
  • Inserting special characters
  • Hybrid SOM (with MLP)
  • symlink warning during rails app deploy with capistrano
  • Why is YAML.load returning the wrong numeric value?
  • Cluster markers with osmdroid
  • RVM, Ruby 1.9.2, Rails 3, Passenger 3.0.2 (Bundler::GemNotFound)
  • Grails redirect with reverse proxy
  • 500 internal server error in ruby on rails
  • How do we generate stack trace in TOMCAT?
  • call a java program from a webapp in tomcat server - the java program is out side of tomcat server
  • How do I capture a rsolr Sunspot exception raised on a different thread from a model callback?
  • Find VMID for running instance
  • Can long-polling be achieved in Restlet by just making the thread sleep?
  • x64 applications using gdi+: what are the consequences on performance?
  • Django rest serializer Breaks when data exists
  • How to rebase a series of branches?
  • Spring security and special characters
  • Azure Cloud Service Web Role web pages do not load
  • what is the difference between the asp.net mvc application and asp.net web application