web-dev-qa-db-fra.com

Pourquoi Phoenix (ecto/Postgres) n'a-t-il pas réussi à se connecter dans dev

Je commence mon voyage Elixir/Phoenix et j'ai quelques problèmes avec ma connexion postgres.

Lorsque je démarre mon serveur, je reçois:

 $ mix phoenix.server
 [error] Postgrex.Protocol (#PID<0.214.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.217.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.218.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.211.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.215.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.219.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.216.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.213.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.212.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [error] Postgrex.Protocol (#PID<0.210.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused
 [info] Running Rumbl.Endpoint with Cowboy using http://localhost:4000
 [error] Postgrex.Protocol (#PID<0.215.0>) failed to connect: ** (Postgrex.Error) tcp connect: connection refused - :econnrefused

Étant nouveaux pour Elixir, Phoenix et Ecto, je ne sais pas comment résoudre ce problème. Toute suggestion quant à mon problème ou à la manière dont je pourrais procéder pour le déboguer serait très appréciée.

La configuration de mon application

J'ai une application basique

mix phoenix.new rumbl
cd rumbl
mix deps.get
mix deps.compile

Mon config/dev.exs a la configuration de base de données suivante

# Configure your database
config :rumbl, Rumbl.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "elixir",
  database: "rumbl_dev",
  hostname: "localhost",
  pool_size: 10

Quand je lance mix ecto.create, il n'y a pas d'erreur et je peux voir le rumbl_dev quand je lance \l dans psql. Il appartient également à l'utilisateur elixir.

L'exécution de mix ecto.migrate génère les mêmes erreurs de connexion

Mon fichier pg_hba.conf a les éléments suivants

local   all             all                                     trust
# IPv4 local connections:
Host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
Host    all             all             ::1/128                 trust

Voici ce que je vois quand je me connecte avec psql

$ psql --dbname=rumbl_dev --username=elixir --Host=127.0.0.1 --password
Password for user elixir:
psql (9.4.5)
Type "help" for help.

rumbl_dev=>
10
Will

Ok, alors je l'ai compris. C'est une simple erreur de ma part à la fin. Bien que facile à faire.

J'utilise Boxen sur mon Mac et cela change le port en 15432 pour une raison quelconque.

J'aurais peut-être atterri plus tôt si le mix ecto.create avait échoué. Je ne sais pas pourquoi ça marche.

Espérons que cela aidera les autres à l'avenir

5
Will
  • Supprimez la base de données rumbl_dev dans postgresql pour un nouveau départ.
  • Si vous le souhaitez, vous pouvez essayer md5 auth pour la version dev sur localhost en ajoutant la ligne suivante au fichier pg_hba.conf 

    # Host DATABASE USER ADDRESS METHOD
    
    Host rumbl_dev elixir localhost md5
    

    Remarque: Voir ici pour plus d'informations sur la configuration de /etc/postsgresql/9.4/pg_hba.conf et modifiez les paramètres à votre guise.

  • Ajoutez les paramètres complets avec mot de passe à dev.exs:

    config :rumbl, Rumbl.Repo, 
    adapter: Ecto.Adapters.Postgres, 
    username: "elixir", 
    database: "rumbl_dev", 
    hostname: "localhost", 
    password: "***password***",
    pool_size: 10
    
  • Essayez d'exécuter mix do ecto.create, ecto.migrate et voyez comment ça se passe.

J'espère que cela aide, sinon, je suis à court d'idées. 

2
stephen_m

Vous devez inclure le mot de passe de votre utilisateur de base de données dans votre bloc de configuration.

config :rumbl, Rumbl.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "elixir",
  password: "???",
  database: "rumbl_dev",
  hostname: "localhost",
  pool_size: 10
0
aholt

J'ai le même problème à chaque fois que je ne lance pas Postgres avant d'appeler mix phoenix.server. J'utilise https://postgresapp.com pour le lancer.

0
nambatee