Graeme
Graeme

Reputation: 481

Rake aborted during postgresql migration

Rails/PostgreSQL newbie here, having real problems dealing with creating PostgreSQL projects in Rails.

Briefly, I am following Ryans excellent Railscast episodes, in particular the episode on deployment. I create a new project like this:

rails new blog -d postgresql

This generates a database.yml file similar to the following (comments extracted):

development:
  adapter: postgresql
  encoding: unicode
  database: blog_development
  pool: 5
  username: blog
  password:

test:
  adapter: postgresql
  encoding: unicode
  database: blog_test
  pool: 5
  username: blog
  password:

production:
  adapter: postgresql
  encoding: unicode
  database: blog_production
  pool: 5
  username: blog
  password:

Looks good so far.

However, on my development machine, whenever I try to run rake db:create:all, I get a message similar to the following:

rake aborted!
FATAL: role "blog" does not exist

My understanding is that this is because I haven't (or, rather, Rails hasn't) created a user called "blog" when the application was created. Therefore, I need to either:

  1. Change the username for all environments to my system's "super user" I chose when I installed Homebrew (which works); OR
  2. Create a new super user for each individual project I set up (e.g. a super user "blog" in this instance).

Now, the problem is this - should I be creating a super user for each individual project I create? If so, how? The reason I ask is that Ryan's Railscasts episodes never actually mention this, so I'm not sure if this is the correct approach to be taking (it seems a bit long-winded), or if there is a problem with my PostgreSQL database installation (as I would have thought that the super user would be automatically set up along with the database when the application is created).

Additionally, so as to make deployment easier, I'd like to keep the overall database.yml file the same in both the development and production environments (although I admit to knowing even less about deployment, so maybe this isn't ideal).

Thanks!

Upvotes: 1

Views: 588

Answers (1)

Jesper
Jesper

Reputation: 4555

Creating database users is up to you. Rails does not create database users.

Depending on your platform, you can use some kind of database management GUI to make it easier to create users and manage their rights. I use PGAdmin, which came with the Mac OS X executable for PostgreSQL. It is available for other platforms as well.

In development, many people use the same "superuser" for all projects. In production, I would advice you to have application-specific users with minimal privileges.

I don't exactly understand the last paragraph about the database.yml being the same for dev and prod envs, because that is precisely the point - one file for all environments. You should probably not use the same credentials for development and production.

Upvotes: 1

Related Questions