A Little Capistrano Recipe for Joyent Accelerator

I’ve started putting together some Capistrano goodness to help automate the process of getting a new application deployed onto a Joyent Accelerator using the default Apache 2.2/Mongrel stack.

The first cut is working (for me at least) and I’ve put up a SVN repository at http://svn.oobaloo.co.uk/svn/accelerator_recipe/ that people can grab the recipe from.

  • accelerator_tasks.rb contains the Accelerator specific tasks. This includes one for creating the Apache 2.2 proxying configuration file, and, the Solaris Service Management Facility configuration file (which lets the accelerator boot mongrel when necessary.

  • apache_vhost.erb is the template for the Apache configuration file

  • smf_template.erb is the template for the SMF configuration file

To use, export the files from SVN to your config directory. So, inside your application’s home directory do

svn export http://svn.oobaloo.co.uk/svn/accelerator_recipe config

Ensure you’ve got a working mongrel_cluster.yml configuration file, and if you haven’t already, create the capistrano deployment recipe cap –apply-to /my/rails/app

Then, add the following to the top of deploy.rb

require ‘config/accelerator_tasks’

and add two new properties (used to configure Apache for the new domain name)

set :server_name, “www.myapp.com”set :server_alias, “myapp.com”

See the Apache docs for more info about the ServerName and ServerAlias directives if you don’t know what they do.

Finally, change the restart task to use the new smf_restart task (which in turn calls the smf_start and smf_stop tasks):

task :restart do  smf_restartend

Once you’ve added everything to Subversion, you ought to be able to do cap setup to create the initial app directories, create your SMF configuration file, and, Apache 2.2 virtual host configuration file. The SMF configuration file goes into your application’s shared directory (that Capistrano creates). The Apache 2.2 configuration file goes to /opt/csw/apache2/etc/virtualhosts/myapp.conf.

Finally, try cap deploy to do a new release, and call restart which will try and start your Mongrel service. I’ve also created a svcs task that will show you all the services installed into the SMF. If your Mongrel instances don’t fire up, check the result by running svcs -x, or check out the /var/svc/log/network-mongrel-myapp-production:default.log and see whether there’s any info about why it didn’t start.


This is pretty rough and ready, but, it works for me with a stock Accelerator. However, this recipe does assume you are deploying your web and application servers to the same accelerator. It shouldn’t be tough to fix it up to figure out how to deploy to different accelerators, but I haven’t done it yet. Also, I’m still not overly familiar with Capistrano so if I’ve made some glaring mistakes in how things are done, also, please let me know (this is more of a first guess than anything, I’m hoping people will correct me).

I’ve posted something similar to the TextDrive forum, check out that thread in case people post follow-ups there too.

Most importantly, if people do use it and fix stuff up, please, please send the fixes back and I’ll get them committed into SVN for everyone.