ruby on rails - Cloud9 postgres
ruby-on-rails postgresql (7)
Estoy intentando configurar una base de datos postgres en una aplicación Rails en Cloud9.
He seguido las instrucciones aquí: https://docs.c9.io/setting_up_postgresql.html y configuré una base de datos llamada cc_database.
Mi archivo database.yml se ve así:
development:
adapter: postgresql
encoding: SQL_ASCII
database: cc_database
pool: 5
username: postgres
password: password
Cuando ejecuto rake db: setup obtengo el siguiente error:
PG::ConnectionBad: FATAL: Peer authentication failed for user "postgres"
Soy bastante nuevo en todo esto, por lo que cualquier consejo sería muy apreciado.
Cómo configurar PostgreSQL y Rails en Cloud9
Al momento de escribir, Cloud9 tiene PostgreSQL preinstalado, por lo que no necesitará instalarlo usted mismo. Sin embargo, no se ejecuta de forma predeterminada, por lo que deberá iniciarlo con este comando en el terminal:
sudo service postgresql start
Cambie la contraseña de PostgreSQL a ''contraseña'' (o elija una contraseña diferente):
sudo sudo -u postgres psql
# This will open the psql client.
# Type /password and press enter to begin process
# of changing the password:
postgres=# /password
# Type your new password (e.g. "password") and press enter twice:
Enter new password:
Enter it again:
# Password changed, quit psql with /q
postgres=# /q
Edita tu config/database.yml
para que sea:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
# Important configs for cloud9, change password value
# to what you entered in the previous psql step.
template: template0
username: ubuntu
password: password
development:
<<: *default
database: your_app_name_development
test:
<<: *default
database: your_app_name_test
production:
<<: *default
database: your_app_name_production
username: your_app_name
password: <%= ENV[''YOUR_APP_NAME_DATABASE_PASSWORD''] %>
(Tenga en cuenta que las configuraciones de template
, username
y password
en la sección default
anterior son esenciales).
Agregue la gema pg
a su Gemfile
:
gem ''pg''
Ejecutar bundle install
.
Elimine la gema sqlite de su Gemfile
(y opcionalmente elimine los db/*.sqlite3
).
Cree la base de datos, cargue schema.rb, y siembre la base de datos usando la tarea db:setup
:
bundle exec rake db:setup
# Run bin/rake -AD db to see all db-related tasks
Inicie o reinicie su aplicación de rieles y verifique que esté funcionando.
Tenga en cuenta que los datos no semilla de su antigua base de datos sqlite no estarán presentes en la nueva base de datos.
Si alguna vez desea utilizar el cliente psql para interactuar con PostgreSQL directamente, en el terminal ejecute psql
o ejecute bin/rails db
.
El postgresql en cloud9 está configurado para autenticarse con un par cuando la conexión localhost. Así que la resolución rápida es cambiar el usuario en su database.yaml al usuario actual. En mi caso el nombre de usuario es ubuntu. Para ver su usuario actual use el comando
$ echo $USER
Así que una lista de comandos en la terminal es.
$ sudo su - postgres
$ createuser ubuntu -dslP
$ Enter password for new role: **same password from your yaml file**
$ Enter it again:
Establece tu archivo yaml como este
development:
adapter: postgresql
encoding: SQL_ASCII
database: cc_database
pool: 5
username: ubuntu
password: password
Ahora puedes correr
rake db:create
rake db:migrate
Encontré la solución. Se necesita editar el archivo pg_hba.conf para cambiar la autenticación de igual a md5 de esta manera:
local postgres postgres md5
Es difícil encontrar el archivo, ya que solo se puede acceder a él a través del terminal en cloud9. No puedes encontrarlo en el árbol de archivos.
Si escribe lo siguiente en postgres, le mostrará la ubicación
SHOW hba_file;
A continuación, puede buscar y editar in vim a través del terminal.
Haz los siguientes pasos:
Cree un nuevo nombre de usuario y contraseña para postgresql en cloud9:
$ sudo service postgresql start $ sudo sudo -u postgres psql postgres=# CREATE USER username SUPERUSER PASSWORD ''password''; postgres=# /q
Crear variables ENV en cloud9:
$ echo "export USERNAME=username" >> ~/.profile $ echo "export PASSWORD=password" >> ~/.profile $ source ~/.profile
Mi database.yml para rieles 4.2.0 en 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
Incluya la gema
pg
en Gemfile e instale:gema ''pg'', ''~> 0.18.2''
$ bundle install
Actualice template1 postgresql para database.yml en 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
Desde la línea de comandos ejecutar:
bundle exec rake db:create
Para mí, hacer los pasos en la configuración del espacio de trabajo de Cloud9 con Rails y Postgresql no fue suficiente. Estaba pasando en mi usuario, pero no la contraseña. echo $USERNAME
estaba subiendo con nada.
Solución
$ sudo su - postgres
$ createuser ubuntu -dslP
Entonces hice esto:
sudo sudo -u postgres psql
postgres=# /password
Enter new password: entered a real password
Enter it again: entered it again
postgres=# /q
Luego hice esto en mi archivo yaml (nota que maté la parte del host):
development:
adapter: postgresql
encoding: unicode
database: my_database_name
pool: 5
username: ubuntu
password: actual_password
Entonces pude crear mi base de datos con:
rake db:create
Y mi servidor Rails se inició sin más problemas.
Una versión corta cuando tienes la aplicación Rails antes de crear cualquier base de datos:
añadir la gema ''pg'' eliminar gema sqlite3
$ bundle install
$ gem install pg
Entonces,
$sudo service postgresql start
$psql -c "create database myapp_development owner=ubuntu"
según https://community.c9.io/t/how-do-i-set-up-postgresql-on-c9-for-my-rails-app/2614/4
Cambiando myapp por cualquier nombre. Luego, copie y pegue a continuación, cambiando myapp por cualquier nombre.
/myapp/config/database.yml
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: ubuntu
password:
timeout: 5000
Como en los comentarios anteriores, no se necesita contraseña, el nombre de usuario puede permanecer en Ubuntu.
$rake db:migrate
Si está usando heroku, no necesitará la sección de producción en database.yml
Utilice el nombre de usuario "ubuntu" con una contraseña en blanco. Mi database.yml se parece a esto:
desarrollo:
adaptador: postgresql
codificación: Unicode
base de datos: myflix_development
piscina: 5
nombre de usuario: ubuntu
contraseña:
prueba:
adaptador: postgresql
codificación: Unicode
base de datos: myflix_test
piscina: 5
nombre de usuario: ubuntu
contraseña:
Si luego se queja de que la contraseña es incorrecta, intente cambiarla utilizando las instrucciones de Cloud9:
En la línea de comandos, escriba: sudo sudo -u postgres psql
postgres = # /password
Ingrese la nueva contraseña: leave it blank and press enter
Ingresa nuevamente: leave it blank and press enter
postgres = # /q
Soy bastante nuevo en esto para Espero que funcione!