PostgreSQL, Ruby, and Rails: WIN

This is a follow-up to my post: PostgreSQL, Ruby, and Rails: I Quit.

So I finally have a working machine with the following installed and ready to rock:

  • Ruby and Rails: From MacPorts

    • Tip: Don’t forget: “source ~/.profile”
    • Do not touch /etc/profile, even though Robby said so. (Although, I’d like to ask why he said to modify /etc/profile…) Everything else in that walkthrough is awesome.
      • /etc/profile is read-only. I really didn’t want to change this, and I even went and looked into /etc/paths.d. Don’t. You don’t need to.
    • Why not use the native Ruby that was shipped with Apple? That’s for another time.
  • Passenger(mod_rails) and PassengerPanes

    • My problem was after installing Ruby and Rubygems through MacPorts, I didn’t update the $PATH.
      • You do not need to create symbolic links (“ln”) at all. Just make sure to “source ~/.profile” after you’re done messing with the PATH variable in it.
    • PassengerPanes is amazing. Use it, and love it if you’re doing any testing on your mac before capistrano’ing the whole thing on a test server.
  • Git

    • Simple installation as “git-core” on MacPorts. I didn’t have any problems with this one.
  • PostgreSQL

    • MacPorts again. Makes sure to also install pgAdmin3, a nice GUI for PostgreSQL.

Which Gem? How To Install It?

If you go to the RubyForge page, you’ll see two gems. I still don’t understand why the releases were named with the “rb-” prefix (maybe to distinguish that it’s a ruby gem). Regardless, there are two gems listed “pg” and “postgres”.

Although “postgres” seems to be more out of date, this is the one that you’re going to want for the near future. Eventually, you’ll be wanting the “pg” gem. If you read some of the news, you’ll see that they’re also working on making sure that it works with Ruby 1.9.

Following yet another great walkthrough, you’re going to want to install it in this manner on an Intel Mac (if you installed PostgreSQL through MacPorts).

sudo env ARCHFLAGS="-arch i386" \
  gem install postgres -- \
  --with-pgsql-lib=/opt/local/lib/postgresql83 \
  --with-pgsql-include=/opt/local/include/postgresql83

PostgreSQL with Rails

Now that PostgreSQL is talking with Ruby, now let’s make Rails talk with it.

In config/database.yml, make sure the adaptor is set to “postgresql”, like so.

development:
adapter: postgresql
encoding: unicode
database: projectname_development
pool: 5
username: username
password: password

That was taken from the generated database.yml, which is done this way when you start your rails project.

rails projectname -d postgresql

My Thanks and Apologies

Thank you to all the blogs I’ve visited over and over again through Google queries. Some information was outdated (and at one point, this will also be outdated), but that’s how it is with anything web development, especially anything to do with Rails it seems. The speed at which this community keeps innovating continues to surprise me, and makes me happy that I made that choice to go with Rails (even though I struggled through it from time to time).

This doesn’t mean I’m done. Oh no, now I have to actually design, test, and develop on the stack I’ve created. I’m sure I’ll be sitting in on the Rails IRC room a couple times.

My apologies for not having a more complete walkthrough, although, I hope the links I’ve included will help out more. If you have any questions, just leave a comment, and I’ll try to help.

Now to keep on hackin’.

PostgreSQL, Ruby, and Rails: I Quit

EDIT: I got it to work, finally. I’m not sure what changed this time around, but here are some notes I made.

This was supposed to go out last Saturday, but my blog took precedence. Oh, that, and Fable 2. Shh.

If you’ve somehow found this post in search of an answer, I have nothing but a rant for you. If the post at Robby on Rails did not work… you’re out of luck, or you’ll have to keep going and finding a solution to the mess that I ran into while trying to use PostgreSQL as my database in Rails.

I must have read that post multiple times, trying to get this to work. I hope that there’s a fourth version of that post sometime in the future… I left a comment there:

I guess I’m waiting for the 4th version of this. I think the official gem now is “ruby-pg” at http://rubyforge.org/projects/ruby-pg.

Everything is perfectly installed, except for the PostgreSQL gem. I cannot get my first rake db:migrate to work properly. It keeps telling me to install the gem “activerecord-postgresql-adapter”, which I know doesn’t exist, and it’s just a general activerecord error. I’ve tried not only the “ruby-pg” gem, but also (the now older) “postgres” as well as the “pg” (I don’t know what this one is).

Are you still using the “postgres” gem? Are things working out?

I was looking forward to rocking out in PostgreSQL land this weekend, but spending hours and hours scouring the Internet… and nothing. I might think it’s because I’m running 8.3.4, the latest version. Anyone else having my problem?

And just underneath it, someone else seemed to be having the same problems (which kinda prompted me to write this in the first place).

I don’t even want to go and document the errors I’ve gotten… Yes, I know about the ARCHFLAG. I know about the –with-pgsql-include-dir and –with-pgsql-lib-dir. I tried binaries of each gem, and even compiling from source. Blah blah blah.

Let Me Show You, The Insanity… Or The Inanity…

I really wanted this post to be titled “PostgreSQL, Ruby, and Rails: WIN.” It just turned out that I couldn’t figure it all out. I felt pretty n00b after spending the better part of three days on this (two weekends, almost). Reading up on PostgreSQL, it just seemed much more open and fully featured. Being unable to actually get it working, I said, screw it, and went with MySQL (something that I’ve played around with before).

The last time I did this, it was before Rails 2.0. I remember it being fairly painless. But now, it seems like the most recent version of PostgreSQL (8.3.4) and the most recent version of Rails (2.1.1) doesn’t seem to work together all too well. I’m guessing it’s the gems, and so it might have to do with Ruby (1.8.7) also.

The PostgreSQL gems seemed to have undergone a couple of forks. I don’t have any problem with forking… but the naming of these gems are ridiculous. It doesn’t help that PostgreSQL is like the weirdest named SQL implementation out there (let me know if there’s something named weirder). Do you shorten PostgreSQL to pg? How about just postgres? Why not call it by the full name but lowercased, postgresql? Then you have to add the ruby portion: rb or ruby. While we’re at it, let’s also call the project name different from the actual gem name itself.

At least, this is how I see this insanity. It feels like there are at least four gems that do the same thing, regardless of them being out of date or not. (pg, postgres, postgres-pr, ruby-postgres…) I must have tried most of them, to no avail. In the end, it seems like “pg” is going to be the one to follow. I think. I’ll have to come back on this later whenever I feel like experimenting with PostgreSQL again.

From the actual PostgreSQL page on the Ruby on Rails Wiki (which is totally outdated at the time of this writing):

You can install a pure Ruby postgres driver called postgres-pr using Gems:

gem install postgres-pr Note that you still have to write adapter: postgresql and not adapter: postgres-pr in your database.yml.

A faster, native driver called “postgres” is also available. It can be installed with the command:

gem install postgres

What I Think Is The Right Gem

The wiki seems to be wrong, and I believe this to be correct (from the RubyForge page):

Ruby-pg provides the module “pg”, a Ruby interface to the PostgreSQL Relational Database Management System, which supersedes the old “postgres” module. This project also maintains fixes for the old “postgres” module.

Okay… so… “Ruby-pg” is the project name. They maintain two modules, “pg” and “postgres”, even though the packages themselves are called “ruby-pg” and “ruby-postgres”. ARGH.

So That’s It

Time to start rolling. For now, I’ll go the MySQL route. There’s a larger community of people using it, as with tools and documentation and such… I’m just a little bit slightly wary of the licensing of the two.