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=>
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
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.
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
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.