Friday, April 03, 2009

Ruby on Rails with Postgresql on Debian/Ubuntu

Based on the information scattered here and there, if you want to use postgresql with Ruby on Rails on Debian/Ubuntu, you can use 2 approaches:

The first approach based on various places and experiment is
1. Set adapter of database.yml to postgresql.
2. Install postgresql-server-dev-?.? (?.? = 8.3 in Debian Lenny).
3. Install the pg gem with "gem install pg"
The above approach has been tested.

Another approach based on
1. Set adapter of database.yml to jdbcpostgresql
2. Install the activerecord-jdbcpostgresql-adapter with "gem install activerecord-jdbcpostgresql-adapter jdbc-postgres"
I don't bother to test this approach since it's using jdbc, which means another layer of complexity. But this might be useful if you use JRuby. In addition, this approach should work on other linux distro.

Thursday, April 02, 2009

Installing ruby 1.9 from source on debian/ubuntu, the rubygem/zlib/ssl problem

Since I noticed some people experienced the same problem, and the solution to this is scattered into multiple posts/comments, I'll just integrate it here.

Basically if you install ruby 1.9 (or probably other versions) from source in Debian based distribution (like Ubuntu), the zlib part of Ruby won't be installed. This problem will reveal itself when you want to install Rubygems, for example Rails for Ruby on Rails.

The solution is:
1. Clean up all that failed compiled files in the directory where you run "make". Just to be on the safe side.
2. Install zlib headers (zlib1g-dev in Debian Lenny) using your distro package manager.
2a. While you're at it, also install ssl headers (libssl-dev in Debian Lenny) using your distro package manager.
3. Run "./configure", "make", "make install".
4. Run "./configure", "make", "make install" again.

It should work then.

In my understanding, the problem is caused by Ruby's zlib compilation process that requires.. ruby, which is not created yet. So basically you try to install ruby as best as you can, then use that ruby to install the complete version of ruby.