2011-12-26 29 views
56

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é el 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 a trust para pasar: fe_sendauth: no password supplied al intentar crear la base de datos.Rol no existe y no se puede crear una base de datos cuando se usa PostgreSQL

# 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 

Después de deshacerse de ese embargo, ahora me sale 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} 

Yo todavía tengo mi development.sqlite3 y text.sqlite3 presente, que podría ser el problema? ¿Qué se debe hacer?

Aquí es mi GIST completo: https://gist.github.com/1522188

Respuesta

118

Añadir un nombre de usuario para su database.yml, así que podría utilizar el nombre de la aplicación (o alguna variante del nombre) como nombre de usuario, voy a utilizar app_name como un marcador de posición:

development: 
    adapter: postgresql 
    encoding: utf8 
    database: app_development 
    pool: 5 
    username: app_name 
    password: 

A continuación, cree el usuario (También conocido como "papel") 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 usuario User es posiblemente un defecto, pero user is already taken para otros fines en PostgreSQL por lo que habría que citar que para preservar el caso si desea utilizar User como nombre de usuario:

postgres=# create role "User" login createdb; 

Eres mejor forma de crear un usuario por aplicación de todos modos.

Querrá hacer cosas similares para su entrada test en database.yml también.

+1

No me permite entrar en 'psql.exe'. Cuando trato de abrirlo, aparece la ventana y luego se cierra automáticamente, así que intenté ir al prompt del cmd y escribir 'c: \ Program Files .. \ .. \ bin> psql.exe> ​​psql: FATAL: el rol "Usuario" no existe "obteniendo el' FATAL' una vez más. ¿Algunas ideas? – LearningRoR

+1

@wrbg: Usted creó un usuario 'postgres' durante la instalación, ¿verdad? Pruebe 'psql -d postgres -U postgres', si necesita una contraseña,' psql -d postgres -U postgres -W'. –

+0

No solicitó al usuario durante la instalación. Déjame ver en la reinstalación. – LearningRoR

6

PostgreSQL intentará crear la base de datos con su nombre de cuenta (inicio de sesión) si username no está especificado en su config/database.yml. En OS X y Linux, puede ver quién es con whoami. Parece que estás usando Windows.

Solución A: Create a PostgreSQL user que coincide con la que está buscando. Por ejemplo

createuser --superuser some_user 

Solución B: Cambiar el usuario DB estableciendo explícitamente un nombre de usuario as shown in mu's answer.

+0

Youdaman! Este fue el único que funcionó para mí. –

+0

¿Realmente necesita '--superuser' o es' -d' suficiente? – Meekohi

4

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 

A continuación, haciendo

rake db:create 

En caso de trabajar!

Cuestiones relacionadas