Redline Software Inc. - Winnipeg's Leader in Ruby on Rails Development

Capistrano and Joyent Accelerator (Open Solaris)

I recently had to deploy a Rails application for a client to a Joyent Accelerator. Paul Ingles has released a Capistrano recipe which helps automate this. I recommend using it.

But even with the recipe, I ran into a couple of snags. The first was with the the myprivateip script that Joyent tells you to use, and the second was Solaris’ ln.


There is a script /opt/csw/bin/myprivateip which is referenced in the mongrel_cluster.yml file they make available. I’d link to the page, but for some reason their how-to pages are all broken today.

Well that script didn’t return anything. It’s supposed to return an ip address.

I changed the script to:

  /usr/sbin/ifconfig -a | ggrep -A1 lo0 | grep inet | awk '{print $2}'

Which is just a fancy way to get The mypublicip script seemed to be ok. After fixing that, you’ll want to rerun the cap setup task.


Well I’m not the only one with this problem. Jamie’s blog post helped me get past a problem I was having with Capistrano not updating the symbolic link for the current release. Turns out you’ll want to use the GNU version of ln. On the box I was on though, GNU ln was gln and not ln like in Jamie’s setup, so I took a slightly different approach in order to fix the problem. I created a bin folder in my user’s directory and then put a link to gln like so:

  ln -s /opt/csw/bin/gln ~/bin/ln

Next, I put my ~/bin a the front of my path. To do so, I edited .bashrc and .bash_profile (since they both had PATH environment stuff set), but that didn’t solve my problem. There was also an environment file inside the ~/.ssh folder, which gets loaded when you run stuff via ssh, which is what Capistrano does of course. So I added ~/bin to the PATH in that file so it looks something like:

PATH=~/bin:/usr/sbin:/usr/bin:<chopped the rest out>

Some other people have replaced a few Capistrano tasks to use gln instead of ln, but that seems sorta nutty to me.

Now Capistrano is cookin with gas.