Amazon this week announced Elastic Beanstalk, a managed Apache Tomcat service for AWS. Naturally, I had to try JRuby on it.
First, the bad:
- AWSEB is really slow to deploy stuff. Several times it got "stuck" and I waited for more than 30 minutes for it to recover. It did not appear to be an app issue, since the app came up just fine.
- The default instance size is t1.micro. I was able to get a Rails app to boot there, but it's a very underpowered size.
- It appears to start up JVMs with 256MB of memory max and 64MB of permgen. For a larger app, or one with many Rails instances, that might not be enough. For a "threadsafe" Rails app, though, it's plenty.
- The default EC2 load balancer for the new Beanstalk instance is set to ping the "/" URL. If you don't rig up a / route in your Rails app (like I forgot to do) the app will come up for a few minutes and immediately get taken out.
And the good news: it works great once you get past the hassles! Here's the process that worked for my app (assuming app is already build and ready for deploy).
Preparing the app:
- Ensure jruby-openssl is in Gemfile. Rails seems to want it in production mode.
- Edit config/environments/production.rb to enable threadsafe mode.
- `warble`
Preparing Elastic Beanstalk:
- Create a new instance, specifying the .war file Warbler created above as the app to deploy
- There is no step two
Once the instance has been prepared, you may want to resize it to something larger than t1.micro if it's meant to be a real app...but it should boot ok.
Have fun!