Over a million developers have joined DZone.

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

DZone's Guide to

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

Free Resource
This is a modified version of the Ruby on Rails Tutorial (TutorialStepOne, TutorialStepOnePostgresql, ...).

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. Using /usr/local > Set The Path; 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  export RUBYOPT=rubygems  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.     Xcode

II.    PostgreSQL Database Server

Install this PostgreSQL Database Server 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: Getting PostgreSQL running for Rails on a Mac

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

Building Ruby, Rails, Subversion, Mongrel, and MySQL on Mac OS X

To install both Mongrel & Mongrel Cluster use: sudo gem install -y mongrel mongrel_cluster (cf. Using Mongrel Cluster).

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

IV. ruby-postgres 0.7.1

sudo gem install -y ruby-postgres

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

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. http://wiki.rubyonrails.org/rails/pages/TutorialStepOneMigrations

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 = Person.new
        entry.name = "Name" 
        entry.street1 = "123 Somwhere" 
        entry.street2 = "" 
        entry.city = "Smallville" 
        entry.state = "KS" 
        entry.zip = "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




This page will display one person.


# <%= @person.name %>
# <%= @person.street1 %>
# <%= @person.street2 %>
# <%= @person.city %>
# <%= @person.state %>
# <%= @person.zip %>

# # # 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 http://wiki.rubyonrails.org/rails/pages/TutorialStepSix). # test rake # 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

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}