views:

221

answers:

1

I have a jruby rails app and I've just started using bundler for gem dependency management. I'm interested in hearing peoples' opinions on deployment strategies. The docs say that bundle package will package your gems locally so you don't have to fetch them on the server (and I believe warbler does this by default), but I personally think (for us) this is not the way to go as our deployed code (in our case a WAR file) becomes much larger.

My preference would be to mimic our MVN setup which fetches all dependencies directly on the server AFTER the code has been copied there. Here's what I'm thinking, all comments are appreciated:

Step1: Build war file, copy to server
Step2: Unpack war on server, fetch java dependencies with mvn Step3: use Bundler to fetch Gem deps (Where should these be placed??)
* Step 3 is the step I'm a bit unclear on. Do I run bundle install with a particular target in mind??
Step4: Restart Tomcat

Again my reasoning here is that I'd like to keep the dependencies separate from the code at deploy time. I'd also like to place all gem dependencies in the app itself so they are contained, rather than installing them in the app user's home directory (as, again, I believe is the default for Bundler)

A: 

Just looking at the default structure from Warbler it copies gems into Rails.root/gems, so I just decided to follow that convention.

*Note: I don't see anywhere that defines this path as a load path for Rails, but it obviously works. Here's my final solution:

Step1: Build war file, copy to server
Step2: Unpack war on server, fetch java dependencies with mvn 
Step3: use Bundler to fetch Gem deps: `bundle install gems --without test --disable-shared-gems`
Step4: Restart Tomcat

Also note that bundle install gems looks like a specific command ie. "Install these gems" but the gems is actually referring to the directory gems in Rails.root. This directory is created by bundler so doesn't need to exist on deploy.

Hope that helps anyone else looking for a similar solution!

brad