Setting Up Ruby On Rails With PostgreSQL On Mac OS X 10.4.9
Join the DZone community and get the full member experience.Join For Free
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"). (USE THE FOLLOWING AT YOUR OWN RISK!) REQUIREMENTS: 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 editingAlternative 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-postgresAs 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 # 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 trust2. create PostgreSQL database
createdb `whoami`_development #dropdb `whoami`_development createdb `whoami`_test #dropdb `whoami`_test #createdb `whoami`_production #dropdb `whoami`_production3. 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: UTF85. 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 # # #
This page will display one person.#
# <%= @person.name %># # # 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
# <%= @person.street1 %>
# <%= @person.street2 %>
# <%= @person.city %>
# <%= @person.state %>
# <%= @person.zip %>
Opinions expressed by DZone contributors are their own.