DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Setting Up Ruby On Rails With PostgreSQL On Mac OS X 10.4.9

  • submit to reddit
        This is a modified version of the <a href="">Ruby on Rails Tutorial</a> (<a href="">TutorialStepOne</a>, <a href="">TutorialStepOnePostgresql</a>, ...).

Log in to an admin user account and, if necessary, fix your command search path in $HOME/.bash_profile, $HOME/.bash_login or $HOME/.profile to include "/usr/local" and "/usr/local/sbin" (cf. <a href="">Using /usr/local > Set The Path</a>; echo $PATH | tr ":" "\n"). If there are no such files, just create them: touch $HOME/.bash_login && touch $HOME/.bashrc (ls -a | grep \.bash).

To avoid RubyGems loading issues it's no bad idea to add  <a href="">export RUBYOPT=rubygems</a>  to your $HOME/.bash_login file as well.

If you want your system path changes to take effect not only for you you can modify the global system path settings in the systemwide initialization files /private/etc/profile and /private/etc/bashrc accordingly.

To fix the paths of installed manual pages add the lines "MANPATH /usr/local/share/man" and "MANPATH /usr/local/man" to sudo nano +45 /usr/share/misc/man.conf (man -w | tr ":" "\n").



I.     <a href="">Xcode</a>

II.    PostgreSQL Database Server

Install this <a href="">PostgreSQL Database Server</a> package.

# test after installation
which psql     # /usr/local/bin/psql
psql --version     # psql (PostgreSQL) 8.2.3, contains support for command-line editing

Alternative installation: <a href="">Getting PostgreSQL running for Rails on a Mac</a>

III.   Ruby 1.8.6, Ruby On Rails 1.2.3 & Mongrel 1.0.1

<a href="">Building Ruby, Rails, Subversion, Mongrel, and MySQL on Mac OS X</a>

To install both Mongrel & Mongrel Cluster use: sudo gem install -y mongrel mongrel_cluster (cf. <a href="">Using Mongrel Cluster</a>).

# test after installation
ruby -v     # ruby 1.8.6
rails -v     # Rails 1.2.3
gem list     # ... mongrel (1.0.1) ...

IV. <a href="">ruby-postgres</a> 0.7.1
sudo gem install -y ruby-postgres

As an alternative you may try <a href="">Ruby on rails installer script for Mac OSX</a> or choose to install via MacPorts as described in <a href="">Installing Ruby on Rails and PostgreSQL on OS X, Second Edition</a> or <a href="">Installing Rails on Mac OS X Tiger (10.4.8)</a>. However, you then may have to change your system paths mentioned above <a href="">accordingly</a>.

1. create a database server

# first create a directory called PostgreSQL-db on your Desktop
mkdir -p $HOME/Desktop/PostgreSQL-db

# create a new db server called railsdb
/usr/local/bin/initdb -E UTF8 -D $HOME/Desktop/PostgreSQL-db/railsdb

dir="$HOME/Desktop/PostgreSQL-db"; /usr/local/bin/pg_ctl -D $dir/railsdb -l $dir/railsdb/postgres.log start

#dir="$HOME/Desktop/PostgreSQL-db"; /usr/local/bin/pg_ctl -D $dir/railsdb -l $dir/railsdb/postgres.log stop -m smart

# check
cat $HOME/Desktop/PostgreSQL-db/railsdb/pg_hba.conf


   # "local" is for Unix domain socket connections only
   local   all         all                               trust
   # IPv4 local connections:
   host    all         all          trust
   # IPv6 local connections:
   host    all         all         ::1/128               trust

2. create PostgreSQL database

createdb `whoami`_development
#dropdb `whoami`_development

createdb `whoami`_test
#dropdb `whoami`_test

#createdb `whoami`_production
#dropdb `whoami`_production

3. set up your Rails project

cd $HOME/Desktop/RubyOnRails-projects
rails -d postgresql `whoami`
cd `whoami`

4. edit /config/database.yml

open -e $HOME/Desktop/RubyOnRails-projects/`whoami`/config/database.yml

# just uncomment the following line
#encoding: UTF8 

5. make Rails & PostgreSQL work together

cd $HOME/Desktop/RubyOnRails-projects/`whoami`

ruby script/generate migration People

# edit /db/migrate/001_people.rb
# cf.

open -e $HOME/Desktop/RubyOnRails-projects/`whoami`/db/migrate/001_people.rb

 class People < ActiveRecord::Migration

    def self.up
      create_table :people do |table|
      # note that "id" is added implicitly, by default
        table.column :name, :string
        table.column :street1, :string
        table.column :street2, :string
        table.column :city, :string
        table.column :state, :string
        table.column :zip, :string

    def self.down
      drop_table :people 

rake db:migrate

ruby script/generate model Person  

#open -e $HOME/Desktop/RubyOnRails-projects/`whoami`/app/models/person.rb  # file will be explained below

ruby script/console

>> ...
        entry = = "Name" 
        entry.street1 = "123 Somwhere" 
        entry.street2 = "" = "Smallville" 
        entry.state = "KS" = "123456"

# check newly created db table

psql `whoami`_development
SELECT * FROM people;

# test
rake      # ... 0 failures, 0 errors

# create new controller
ruby script/generate controller People list view new edit

# edit /app/controllers/people_controller.rb
open -e $HOME/Desktop/RubyOnRails-projects/`whoami`/app/controllers/people_controller.rb

  def view
   @person = Person.find(1)

# edit /app/views/people/view.rhtml
open -e $HOME/Desktop/RubyOnRails-projects/`whoami`/app/views/people/view.rhtml

# copy & paste & uncomment the following lines

#  <body>
#    <h1>People#view</h1>
#    <p>This page will display one person.</p>
#    <p>
#    <%= %><br />
#    <%= @person.street1 %><br />
#    <%= @person.street2 %><br />
#    <%= %><br />
#    <%= @person.state %><br />
#    <%= %><br />
#    </p>
#  </body>

# the file /app/models/person.rb explained (see above)
# open -e $HOME/Desktop/RubyOnRails-projects/`whoami`/app/models/person.rb

# class Person < ActiveRecord::Base
# end

# How does this know to map to the people table we created? ActiveRecord pluralizes the class name and looks for that 
# table in the database. This doesn’t just mean adding an ’s’. Irregular plural forms are also handled, so Rails knows 
# that the plural of ‘person’ is ‘people’. The rules for how it does this are described in the documentation
# (see

# test

# start your Rails app
cd $HOME/Desktop/RubyOnRails-projects/`whoami`

ruby script/server
#ruby script/server --environment=development

# open a second shell window and go to ...  
open -a Safari http://localhost:3000/people/view