Now I'm a little shaky with Ubuntu and postgres, but here is what I've currently done.
In Ubuntu, I've created a user, called postgres, with a password of postgress:
$ sudo adduser postgres
Enter new UNIX password: (I typed ' postgres ' here)
Retype new UNIX password: (I typed ' postgres ' here)
I then logged in as the postgres user:
$ su postgres
Password: (I typed ' postgres ' here)
As postgres, I started the postgres server:
postgres@ubuntu:/$ /usr/lib/postgresql/9.1/bin/postgres -D /usr/local/var/postgres
LOG: database system was shut down at 2013-11-05 17:04:32 PST
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
Next, I created a rails application setup to use a postgres database:
rails new myapp --database=postgresql
I appended my database configuration YAML file:
# PostgreSQL. Versions 8.2 and up are supported.
#
# Install the pg driver:
# gem install pg
# On OS X with Homebrew:
# gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
development:
adapter: postgresql
encoding: unicode
database: postgresql_development
pool: 5
username: postgres
password: postgres
# Connect on a TCP socket. Omitted by default since the client uses a
# domain socket that doesn't need configuration. Windows does not have
# domain sockets, so uncomment these lines.
#host: localhost
# The TCP port the server listens on. Defaults to 5432.
# If your server runs on a different port number, change accordingly.
#port: 5432
# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public
# Minimum log levels, in increasing order:
# debug5, debug4, debug3, debug2, debug1,
# log, notice, warning, error, fatal, and panic
# Defaults to warning.
#min_messages: notice
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: postgresql
encoding: unicode
database: postgresql_test
pool: 5
username: postgres
password: postgres
production:
adapter: postgresql
encoding: unicode
database: postgresql_production
pool: 5
username: postgres
password: postgres
Finally, I run
rake db:setup
Not really knowing what to expect, really. As mentioned I'm a little shaky with this topic. Many a little db.postgres file will appear in my application's db directory?
At any rate, I get a huge error message, but this gist of it is this:
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"postgresql_development", "pool"=>5, "username"=>"postgresql", "password"=>nil}
FATAL: role "postgresql" does not exist
The good news is that the database server output is this:
FATAL: role "postgresql" does not exist
FATAL: role "postgresql" does not exist
FATAL: role "postgresql" does not exist
Meaning everything's 'hooked up' correctly on my system and that the rake task is attempting to create my test, production and deployment databases.
The bad news is that I don't really understand the error messages:
FATAL: role "postgresql" does not exist
Um, pretty sure the username specified in my YAML is postgres, not postgresql.
couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"postgresql_development", "pool"=>5, "username"=>"postgresql", "password"=>nil}
Again, why is my username postgresql and my password blank? This simply isn't what I have in my YAML!
If someone could help me take this final step I'd be very grateful :)
Final question, how do non-sqlite3 databases work exactly, where are they located on the system. When I started off with Rails and saw the little db.sqlite3 inside my db directory, I can understand that completely.
With beefer databases, though, the database is now stored in something called a cluster, correct?
Now for every single postgres rails app I create, will all of their databases be stored in the cluster?
Will this be the same if I purchase an Ubuntu VPS and install postgres on it? A cluster located at /usr/local/var/postgres
containing all of the databases for all of my applications?