2011-04-28 31 views
6

Lo primero es lo primero, discúlpeme por noobness absoluto. Realmente traté de encontrar una solución, pero ahora estoy atascado y completamente despistado.rake db: crear falla, problema de autenticación con postgresql 8.4

estoy tratando de implementar una aplicación de rails 3 en un servidor distante; al desarrollar en mi VM local, no se mostró ningún problema. Pero ahora, cuando intento ejecutar

rake db:create 

falla, con el error (aquí traducido, ya que soy francés):

FATAL : password authentication failed for user <<mylogin>> 

aquí es mi database.yml:

login: &login 
    adapter: postgresql 
    username: mylogin 
    password: mypassword 
    host: localhost 
    port: 5432 
    encoding: UTF8 

development: 
    <<: *login 
    database: somesite_development 

test: 
    <<: *login 
    database: somesite_test 

production: 
    <<: *login 
    database: somesite_production 

el usuario "mylogin" se ha creado en el lado de postgrejo con la herramienta de línea de comandos "createuser". Está autorizado para crear dbs. postgresql.conf configura el servidor para escuchar en localhost. He intentado muchas cosas con pg_hba.conf, ninguna funciona: cualquiera que sea el método utilizado (ident, password, md5) para el usuario "mylogin" en 127.0.0.1, la autenticación falla, aunque nunca he tenido problemas para conectar/crear dbs con psql.

¿Alguna pista?

EDIT: bien, descubrí lo increíblemente estúpido que he sido ... ¡la contraseña de mi usuario simplemente no estaba configurada! Creo que olvidé el punto y coma después de

ALTER USER xxxx WITH PASSWORD xxxx;

... vi esto solicitando "SELECT * FROM pg_shadow;" - el campo de contraseña estaba vacío. Tres días de mi vida desperdiciada debido a este error tonto ...

Respuesta

2

bien, descubrí lo increíblemente estúpido que he sido ... ¡la contraseña de mi usuario simplemente no estaba configurada! Creo que se me olvidó el punto y coma después

ALTER USER xxxx WITH PASSWORD xxxx ; 

... Vi esto solicitando "SELECT * FROM pg_shadow;" - el campo de contraseña estaba vacío. Tres días de mi vida desperdiciados por este error tonto ...

+1

asegúrate de que strigify la contraseña ... por lo que harías 'ALTER USER xxxx WITH PASSWORD 'xxxx';' – JaeGeeTee

0

Estas son algunas instrucciones concisas que deben trabajar para usted

http://www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/.

Básicamente, debe establecer el método de autenticación para el servidor local en 'confianza'.

+0

Gracias por la respuesta, pero como he dicho: "He intentado muchas cosas con pg_hba.conf, ninguna funcionó, cualquiera que sea el método utilizado (ident, password, md5)" Además, no creo que mi el administrador del servidor estaría contento si permitiera que este usuario se conectara por el método de confianza ... Pero bueno, gracias por la pista, lo intentaré y si aún no me puedo conectar, esto significa que algo anda mal en otro lado. –

+0

Bien, funciona. Ahora me pregunto por qué los otros métodos no funcionarán, aunque ... –

0

Debe darle "myuser" en postgresql el privilegio "Puede crear objetos de base de datos".

En pgadmin, que se parece a esto:

enter image description here

Después de llamar rake db: crear, usted puede quitar este privilegio.

+0

Gracias, pero como dije al final de mi pregunta (EDIT), mi problema se debió a la absoluta estupidez. Debo añadir que más tarde tropecé con otro error: con ruby> 1.9.2, parece que el analizador de YAML predeterminado está actualmente roto y no admite las teclas de combinación ("<<:"). –

19

También estuve atascado en este problema durante mucho tiempo, y fui a una variedad de enlaces (incluidos los que se ofrecen en esta publicación) para probar y encuentra la respuesta, pero fue en vano. Sin embargo, la solución es muy simple.Aunque muchas de las otras respuestas estaban en el camino correcto aquí están los pasos exactos para resolver el problema:

  1. abrir su archivo pg_hba.conf en un editor de texto de su elección. (Se encuentra en/etc/postgresql // principal)

  2. Vaya a la línea que dice:

    # "local" es para Unix conexiones de socket de dominio única

y pegar a continuación it:

local all   all     trust 

Esto confiará en todos los usuarios de Unix que intenten conectarse al servidor psql en la máquina local. (Lea la documentación en la parte superior de la página para obtener más información sobre la función de las columnas)

  1. Guardar el archivo pg_hba.conf y salir del editor de texto.

  2. Reiniciar el servidor PostgreSQL ejecutando el comando:

    reinicio del servicio PostgreSQL

  3. Ahora tratar de iniciar un servidor psql ejecutando:

    psql -d -U (o "psql" para abreviar)

  4. Debe poder iniciar sesión sin ningún problema.

* Nota: Todo esto supone que tiene tiene un nombre de usuario válido para el registro de psql en Si usted no sigue los enlaces de abajo para instalar uno:.

Configuración de un usuario: http://erikonrails.snowedin.net/?p=274

Asegúrese de que tiene un postgres usuario válido: http://archives.postgresql.org/pgsql-novice/2002-08/msg00072.php

Listado de todos los usuarios existentes psql: Si usted ar e buscando el comando "LIST USERS" o "DISPLAY USERS", intente:

"select * from pg_user;" (cuando inició sesión en psql)

¡Buena suerte!

+3

Gracias, pero esta pregunta ya tiene una respuesta aceptada ... (el problema era que yo era tonto> . <) Además, no creo que la solución "hey, eliminemos toda la seguridad y dejemos que todos los usuarios locales entren" es una buena idea, especialmente cuando comparte un servidor con muchos otros usuarios de diferentes compañías. –

+0

@m_x tiene razón. Es como cazar aves con bazooka. Claro que solucionas el problema, pero te abre para otras inquietudes. – JaeGeeTee

2

Tuve el mismo problema. En mi caso fue porque en mi archivo database.yml el nombre de usuario comenzó con mayúscula pero en la base de datos todo estaba en minúsculas.

Solución: Al crear un usuario desde la línea de comandos de postgres, convierte todas las letras a minúsculas. Para usar mayúsculas, se debe usar double quotes.

Ejemplo:

create user AlbertEinstein; result = alberteinstein

vs

create user "AlbertEinstein"; result = AlbertEinstein

+0

tipo te amo, eso me ayudó mucho – gilmishal

0

En mi caso, he encontrado que una tarde línea de la regla host permisos en el archivo pg_hba.conf tenía más plagado de la anterior local línea. Estaba configurando correctamente la línea local para utilizar la autenticación MD5 pero la línea host se fijó para ident el que he cambiado a md5

Como otros han enfatizado aquí, tenga en cuenta que el uso de trust es un método inseguro, por lo que no se debe utilizar en cualquier implementación de estilo de producción.

Cuestiones relacionadas