Mac OS X Ruby on Rails – Where to Go Next

    July 12, 2006

When we left off with Mac OS X Ruby on Rails, I had Rails up and running but had not a clue as to where to go from there.

It’s not hard to find information and tutorials on the net, but as always, assumptions are made, prerequisites are brushed by or ignored entirely, and you can find yourself in a hall of mirrors wondering which one of the reflections is what you really need. No doubt the page you are reading now will have similar deficiencies, so take a deep breath and be prepared for adverse conditions.

The first problem I encountered was mysql. The install steps I followed had me bring down MySQL for OS X Intel and modify my PATH to include /usr/local/mysql/bin. That’s wrong. You actually need your PATH to include /usr/local/mysql-standard-4.1.20-apple-darwin8.5.1-i686/bin/ because that’s where that OS X package puts it. Or at least that’s what I had to do, and that’s why these sorts of articles can lead you astray: things change all the time. Recipes are great, and can sometimes work for those of us without any culinary skills. But when you can’t find any chopped pimento, my wife knows what to do, and I do not. Same with computer software install recipes: if it all works for you, that’s great, but when it doesn’t, you need a brain and some experience.

My day wouldn’t be complete without revisiting my small MySQL Rant. While it remains true that databases are often employed doing labor better done with flat files or even in-memory tables, the fact is that all the cool kids have MySQL hats and we wouldn’t want them dissing us any more than they already would, so I’ll grit my teeth and use MySQL for this exposition. It is a trial and a tribulation to do so, and I expect a pat on the back accompanied by soothing words from you to show your appreciation of my pain.

I’m waiting.

Ok, fine, we’ll go ahead anyway. Having properly finagled our path, it’s time to create a database for our “try_rails” project.

mysqladmin -u root -p create try_rails_development

That asks for a password; if you’ve done nothing but follow the steps I outlined here, just press enter. If instead you are already wearing your MySQL tee-shirt, hat, and belt-buckle, you probably changed your MySQL root password and know what to type all by yourself. So don’t ask me. But.. if you were the “I know what I’m doing” type, be aware that Rails needs to know your password, so you’ll need to edit try_rails/config/database.yml and in doing so, you might understand why we created try_rails_development. Everyone else should just move along quietly – nothing more to see here, folks.

Some magic incantations:

cd try_rails
ruby script/generate migration accounts

I’m not entirely clear yet on what that really does. I’ll take it on faith as a necessary step for now.

vi db/migrate/001_accounts.rb

Yeah, you have to use vi. Oh, ok, you don’t. Use whatever you want and stop moaning. Edit the file and make it look like this:

Class Accounts < ActiveRecord::Migration    def self.up      create_table :puters do |table|       table.column :name, :string       table.column :proc, :string       table.column :cost, :float     end    end    def self.down     drop_table :puters    end end

Now do this:

ruby script/generate scaffold puter expenses
cd try_rails; ruby script/server
(If you had left the server running, Ctrl-C will stop it)

More magic words. Ahh, the power of blind faith. The only part of that I understand is the editing.

Oh, yes, you can find explanations of the inner machinations of these things on the web, and "script/generate" is of course just a Ruby program that you could follow and ultimately comprehend. My knowledge of Ruby is insufficient for that at the moment, so I'll just follow the recipes.

Amazingly enough, you now have a working application. Point your browser at http://localhost:3000/expenses and there it is. It's simple, and not all that glamorous, but it does the things it needs to do.

*Originally published at

Add to | DiggThis | Yahoo! My Web | Furl

A.P. Lawrence provides SCO Unix and Linux consulting services