ruby-on-rails - proyecto - ruby on rails with postgresql
PG:: ConnectionBad: fe_sendauth: sin contraseƱa (4)
Cambie el código de la siguiente manera y funcionará
pg_hba.conf:
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
Debajo de su explicación:
confianza
Permitir la conexión incondicionalmente. Este método permite a cualquier persona que pueda conectarse al servidor de base de datos PostgreSQL iniciar sesión como cualquier usuario de PostgreSQL que desee, sin la necesidad de una contraseña o cualquier otra autenticación.
md5
Requerir que el cliente proporcione una contraseña con hash doble MD5 para la autenticación.
consulte para obtener más información here
Cuando intento ejecutar "rake test" en una base de datos local de postgres, arroja la excepción anterior.
Aquí está mi archivo pg_hba.conf: # Inicio de sesión administrativo de base de datos por socket de dominio Unix local todos los pares de postgres
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all username peer
local myapp_dev myapp md5
local myapp_test myapp md5
local myapp_prod myapp md5
#local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
y aquí está la sección relevante de mi database.yml
test:
adapter: postgresql
database: myapp_test
pool: 5
timeout: 5000
host: localhost
username: username
password:
En la base de datos real.yml, ''nombre de usuario'' se reemplaza con mi nombre de usuario real con el que estoy conectado. Dado que el método de autenticación se define como ''peer'', no se requiere contraseña.
También me he tomado la precaución de reiniciar Postgres
sudo -u postgres pg_ctlcluster 9.3 main restart
¿Qué más me echo de menos aquí?
Me encontré con esta pregunta, también. Comprobé la configuración de mi base de datos, /var/www/myproject/shared/config/database.yml, production: adapter: postgresql pool: 5 timeout: 5000 encoding: utf8 host: localhost database: myproject username: myname password: <%= ENV[''name_DATABASE_PASSWORD''] %>
Encontré que el último párrafo es incorrecto, el código correcto es
password: <%= ENV[''myproject_DATABASE_PASSWORD''] %>
Si su hb_conf ya ha sido modificado para forzar las contraseñas, asegúrese de que la configuración de la base de datos de la aplicación de sus rieles incluya una contraseña tanto en entornos de desarrollo como de prueba.
default: &default
adapter: postgresql
encoding: unicode
pool: 5
host: localhost
username: your_user
password: your_password
development:
<<: *default
database: your_db_development
test:
<<: *default
database: your_db_test
production:
url: <%= ENV[''DATABASE_URL''] %>
Recibí este error cuando no proporcioné una contraseña para la base de datos de prueba.
localhost
como host se refiere a una conexión TCP, lo que significa que el método auth es md5
(se requiere contraseña) según su pg_hba.conf
:
# IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5
Para que se tome el método de peer
, necesitarás conectarte a través de sockets de dominio Unix, y como parece que estás usando un sistema operativo similar a Debian, eso significa poner /var/run/postgresql
en el campo de host
, o nada en absoluto (es el valor predeterminado a menos que las variables de entorno indiquen lo contrario).
EDITAR: si utiliza URI de base de datos (compatible desde Rails-4.1, como se anunció en http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/ ), la sintaxis podría ser:
para localhost:
test: "postgresql://localhost/myapp_test"
para el dominio de socket predeterminado de Unix (campo de host dejado vacío):
test: "postgresql:///myapp_test"