Rails deployment strategies with Bundler and JRuby
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 commen开发者_Python百科ts 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 runbundle 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)
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!
精彩评论