Installing PostgreSQL via Vagrant for Rails Development

As I’ve mentioned a couple months back in a discussion on Twitter, I think PostgreSQL would be much more popular among Rails programmers if not for the tiring setup. So let’s simplify it a bit with Vagrant.

Last time we’ve created a simple Vagrantfile that allowed us to start a bare Ubuntu box to use for our Rails development. Now we’ll change it a bit in order to use PostgreSQL instead of MySQL. Here it is:

# Berksfile
site :opscode

cookbook 'apt'
cookbook 'database'
cookbook 'set_locale', path: './cookbooks/set_locale'
cookbook 'postgresql_server_utf8', path: './cookbooks/postgresql_server_utf8'


# Vagrantfile

require 'berkshelf/vagrant'

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "precise32"

  # Use Berksfile
  config.berkshelf.enabled = true

  # Enable provisioning with chef solo, specifying a cookbooks path, roles
  # path, and data_bags path (all relative to this Vagrantfile), and adding
  # some recipes and/or roles.
  config.vm.provision :chef_solo do |chef|
    chef.add_recipe 'apt'
    chef.add_recipe 'locale'
    chef.add_recipe 'postgresql_server_utf8'

    chef.json = {
      'postgresql' => {
        'version' => '9.1',
        'initdb_locale' => 'en_US.UTF-8',
        'password' => {'postgres' => 'mysuperfancypassword'},
        'config' => {
          'lc_messages' => 'en_US.UTF-8',
          'lc_monetary' => 'en_US.UTF-8',
          'lc_numeric' => 'en_US.UTF-8',
          'lc_time' => 'en_US.UTF-8'
        }
      }
    }
  end
end

In order for this to work, we need to import two recipes to a cookbooks directory in our app: set_locale and postgresql_server_utf8. They take care of setting the proper encoding to get a UTF8 locale database.

And that’s all, folks.

Share on Twitter, Facebook
Prev Next