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
Setting Up Ruby On Rails With PostgreSQL On Mac OS X 10.4.9
This is a modified version of the <a href="http://wiki.rubyonrails.org/rails/pages/Tutorial">Ruby on Rails Tutorial</a> (<a href="http://wiki.rubyonrails.org/rails/pages/TutorialStepOne">TutorialStepOne</a>, <a href="http://wiki.rubyonrails.org/rails/pages/TutorialStepOnePostgresql">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="http://hivelogic.com/narrative/articles/using_usr_local">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="http://rubygems.org/read/chapter/3">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").
(USE THE FOLLOWING AT YOUR OWN RISK!)
REQUIREMENTS:
I. <a href="http://developer.apple.com/tools/xcode/index.html">Xcode</a>
II. PostgreSQL Database Server
Install this <a href="http://www.entropy.ch/software/macosx/postgresql/">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="http://brilliantcorners.org/node/84">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="http://hivelogic.com/narrative/articles/ruby-rails-mongrel-mysql-osx">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="http://mongrel.rubyforge.org/docs/mongrel_cluster.html">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="http://rubyforge.org/projects/ruby-postgres/">ruby-postgres</a> 0.7.1
sudo gem install -y ruby-postgres
As an alternative you may try <a href="http://www.dotrb.com/2007/3/25/ruby-on-rails-installer-script-for-mac-osx">Ruby on rails installer script for Mac OSX</a> or choose to install via MacPorts as described in <a href="http://www.robbyonrails.com/articles/2007/06/19/installing-ruby-on-rails-and-postgresql-on-os-x-second-edition">Installing Ruby on Rails and PostgreSQL on OS X, Second Edition</a> or <a href="http://blog.nanorails.com/articles/2006/10/17/installing-rails-on-mac-os-x-tiger-10-4-8">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="http://www.railsontherun.com/2007/5/9/installing-postgresql-on-mac">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 # START DB SERVER dir="$HOME/Desktop/PostgreSQL-db"; /usr/local/bin/pg_ctl -D $dir/railsdb -l $dir/railsdb/postgres.log start # STOP DB SERVER #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 ... # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 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
end
end
def self.down
drop_table :people
end
end
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"
entry.save
exit
# check newly created db table
psql `whoami`_development
SELECT * FROM people;
\q
# 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)
end
# edit /app/views/people/view.rhtml
open -e $HOME/Desktop/RubyOnRails-projects/`whoami`/app/views/people/view.rhtml
# copy & paste & uncomment the following lines
#<html>
# <body>
# <h1>People#view</h1>
# <p>This page will display one person.</p>
# <p>
# <%= @person.name %><br />
# <%= @person.street1 %><br />
# <%= @person.street2 %><br />
# <%= @person.city %><br />
# <%= @person.state %><br />
# <%= @person.zip %><br />
# </p>
# </body>
#</html>
# 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





