ruby-on-rails - proyecto - rails new myapp postgresql
El rol no existe y no puede crear una base de datos cuando se usa PostgreSQL (3)
Estoy usando Heroku para mi aplicación y requiere PostgreSQL, pero aún puede usar SQLite3 para el desarrollo. Como Heroku desaconsejaba fuertemente tener 2 bases de datos diferentes, decidí cambiar a PostgreSQL para el desarrollo. Instalé la gem pg
la gem pg
y también fui al sitio oficial de PostgreSQL para obtener el instalador de Windows y también cambié mi database.yml
. Durante la instalación, requiere una contraseña para PostgreSQL, así que hice una. Tuve que cambiar el archivo pg_hba.conf
de usar md5
para trust
en fin de pasar: fe_sendauth: no password supplied
al intentar crear la base de datos.
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 trust # was md5
# IPv6 local connections:
host all all ::1/128 trust # was md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host replication postgres 127.0.0.1/32 trust
#host replication postgres ::1/128 trust
Sin embargo, después de deshacerme de eso, ahora entiendo esto:
$ rake db:create
(in C:/app)
FATAL: role "User" does not exist
Couldn''t create database for {"adapter"=>"postgresql", "encoding"=>"utf8",
"database"=>"app_test", "pool"=>5, "username"=>nil, "password"=>nil}
Todavía tengo mi development.sqlite3
y text.sqlite3
presente, ¿podría ser ese el problema? ¿Qué se debe hacer?
Aquí está mi esencia: https://gist.github.com/1522188
Agregue un nombre de usuario a su database.yml
, también podría usar el nombre de su aplicación (o alguna variante del nombre) como nombre de usuario, app_name
como marcador de posición:
development:
adapter: postgresql
encoding: utf8
database: app_development
pool: 5
username: app_name
password:
Luego crea el usuario (AKA "role") dentro de PostgreSQL usando psql.exe
:
$ psql -d postgres
postgres=# create role app_name login createdb;
postgres=# /q
La primera línea está en su terminal, las siguientes dos están dentro de psql
. Luego haz tu rake db:create
.
El User
usuario posiblemente sea un user
predeterminado, pero el user
ya lo tomó para otros fines en PostgreSQL, por lo que tendría que citarlo para preservar el caso si desea utilizar el User
como nombre de usuario:
postgres=# create role "User" login createdb;
Es mejor crear un usuario por aplicación de todos modos.
También querrás hacer cosas similares para tu entrada de test
en database.yml
.
PostgreSQL intentará crear la base de datos con su nombre de cuenta (inicio de sesión) si no se especifica un username
en su config/database.yml
. En OS X y Linux puedes ver quién es con whoami
. Parece que estás usando Windows.
Solución A: crea un usuario de PostgreSQL que coincida con el que está buscando. Por ejemplo
createuser --superuser some_user
Solución B: Cambie el usuario de DB al establecer explícitamente un nombre de usuario como se muestra en la respuesta de mu .
Si tiene una cuenta / usuario específico en su máquina para postgres llamado postgres, por ejemplo.
Luego, al ejecutar este comando aparecerá un mensaje para que ingrese un nombre de rol.
sudo -u postgres createuser --interactive
Luego haciendo
rake db:create
¡Deberia trabajar!