Cloud9 postgres
I am trying to set up a postgres database in a Rails app in Cloud9.
I have followed the instructions here: https://docs.c9.io/setting_up_postgresql.html and set up a database called cc_database.
My database.yml file looks like this:
development:
adapter: postgresql
encoding: SQL_ASCII
database: cc_database
pool: 5
username: postgres
password: password
When I run rake db:setup I get the following error:
PG::ConnectionBad: FATAL: Peer authentication failed for user "postgres"
I am quite new to all this, so any advice would be much appreciated.
Solution 1:
Do the following steps:
-
Create a new username and password for postgresql on cloud9:
$ sudo service postgresql start $ sudo sudo -u postgres psql postgres=# CREATE USER username SUPERUSER PASSWORD 'password'; postgres=# \q
-
Create ENV variables on cloud9:
$ echo "export USERNAME=username" >> ~/.profile $ echo "export PASSWORD=password" >> ~/.profile $ source ~/.profile
My database.yml for rails 4.2.0 on cloud9:
default: &default adapter: postgresql encoding: unicode pool: 5 username: <%= ENV['USERNAME'] %> password: <%= ENV['PASSWORD'] %> host: <%= ENV['IP'] %> development: <<: *default database: sample_app_development test: <<: *default database: sample_app_test production: <<: *default database: sample_app_production
-
Include the gem
pg
in Gemfile and install:gem 'pg', '~> 0.18.2'
$ bundle install
-
Update template1 postgresql for database.yml on cloud9:
postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1'; postgres=# DROP DATABASE template1; postgres=# CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE'; postgres=# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1'; postgres=# \c template1 postgres=# VACUUM FREEZE; postgres=# \q
-
From command line run:
bundle exec rake db:create
Solution 2:
The postgresql in cloud9 is setup to authenticate with peer when localhost connection. So the quickly resolution is change the user in your database.yaml to current user. In my case the name of user is ubuntu. To see your current user use the command
$ echo $USER
So a list of command in terminal is .
$ sudo su - postgres
$ createuser ubuntu -dslP
$ Enter password for new role: **same password from your yaml file**
$ Enter it again:
Set your yaml file like this
development:
adapter: postgresql
encoding: SQL_ASCII
database: cc_database
pool: 5
username: ubuntu
password: password
Now you can run
rake db:create
rake db:migrate
Solution 3:
Use the username "ubuntu" with a blank password. My database.yml looks like this:
development:
adapter: postgresql
encoding: unicode
database: myflix_development
pool: 5
username: ubuntu
password:
test:
adapter: postgresql
encoding: unicode
database: myflix_test
pool: 5
username: ubuntu
password:
If it then complains the password is wrong, try changing the password using Cloud9's instructions:
In the command line, type: sudo sudo -u postgres psql
postgres=# \password
Enter new password: leave it blank and press enter
Enter it again: leave it blank and press enter
postgres=# \q
I'm pretty new to this to. Hope that works!