Automatically Generate Vagrant Machines from Chef Node Definitions

If you use chef-solo to provision your production servers, Vagrant makes it easy to set up a production- like environment on a local VM for testing purposes. It can however seem like wasted time to have to manually replicate the contents of your node definition in your Vagrantfile and more importantly it's easy to make a change to either the Vagrantfile or the node definition and forget to update the other to match. In this post I'll look at a simple method of automatically generating Vagrant machines based on node definitions.

A Rails Development Environment with Docker and Vagrant

Onboarding new developers to a Rails projects is still a far harder task than it should be. A big part of this is that setting up a development environment for an app or suite of apps, getting the correct ruby versions, database versions etc running locally, can in many cases take upwards of a day. A combination of Vagrant and Docker can make this a thing of the past.

DNSimple SSL Certificates and NGinx

If you purchase a Geotrust SSL Certificate from DNSimple for your domain, there's a small amount of setup required to get the certificate in a format you can use with Nginx. This post includes an overview of the process and a simple bash script to automate it.

Starting a Rails Console with Capistrano 3

When deploying with Capistrano 3, it's often useful to be able to start a rails console without having to ssh into the target host and set it up manually. This can be particularly challenging if you're using rbenv as you have to ensure that rails console is called with suitable environment variables set set to ensure that the rbenv Ruby is used not the system Ruby.

Reading Git Merge Conflicts

Git merge conflicts are something any developer who works in a team bigger than one, has to deal with from time to time. It's surprisingly common it seems to deal with these without really understanding what's going, I did for years and I know many others who still are.

Teaching People to Code

Recently I've been experimenting with ways of teaching people to code which match the way I and other succesful developers I know have learnt. These focus less on theory and syntax and more on problem solving and "hacking things together". Now I'm looking for five people who want to learn to make stuff with Ruby to teach.

Capistrano 3 Tutorial

One of the most popular posts on this blog is on how to use Capistrano 2 to deploy Rails applications to a VPS, including the scenario when you want to run several different applications on the same server. Capistrano 3 has now been released and having upgraded several large production applications to use it, I've found there to be a lot of worthwhile improvements over v2. This post explains, with sample code, how to use Capistrano 3 to deploy one or several Rails applications to a VPS.

Tailing log files with Capistrano 3

When deploying Rails Applications with Capistrano 2 it was common to have tasks to tail log files on production servers so that they could be viewed locally without sshing into the remote machine(s). In this post I'll cover how to do this with Capistrano 3.

Deploying Multiple Rails Applications to a Single VPS

When I announced the release of my book, deploying rails applications, one of the most common questions I got was whether it covered deploying multiple apps to a single VPS. It does and since there was so much interest, I've put together a brief tutorial and sample code on the basics.

Using Vagrant to test Chef Cookbooks

Vagrant makes it easy to manage and distribute virtual machines. Vagrant is an extremely powerful tool in itself with a particular strength of making it easy to distribute local testing environments to developers which (almost) perfectly mirror your production configuration.

Using Chef to provision a Rails and Postgres server

This is a brief overview of how to use chef to automate the provisioning of a server for a Ruby on Rails application. Sample code is provided as a starting point at

2021 Update: a revised version of this tutorial is available here

Using the pebble watch to display stock quotes

I’ve always been intrigued by books like “Reminiscences of a stock operator” where trading is based on continually watching a market and developing a “feel” for it. Having spent a lot of time experimenting with them, i’m generally skeptical of automatic rule based trading systems but remain intrigued about entirely discretionary, immersion based systems.

Indexes with Mongoid are not created automatically

When coming from Mongoid from an Activerecord background, there are some subtle differences around uniqueness and indexes which can cause hard to debug problems.

It probably isn't a big deal

There are a multitude of burning things I really need to do now. ShopOfMe is launching a huge new feature in five weeks, inbox zero has become “inbox less than three pages” and having just spoken to the doctors surgery I’ve been going to since I was a child, they’ve advised me I can't have an appointment because I don't exist.

2012 in Review

At the start of 2012, my goal was fairly simple, remain solvent for a full year relying only on consulting income while leaving enough time to bootstrap ShopOfMe and InGuide. No-one has yet repossessed the computer I’m writing this on so it’s fair to say I got at least half way there.