Why does Phoenix (ecto/Postgresx) fail to Connect in dev
Solution 1
Ok, so I figured it out. It is a simple mistake on my part in the end. Though an easy one to make.
I am using Boxen on my Mac and it changes the port to 15432
for some reason.
I may have landed on this sooner if the mix ecto.create
had failed. Not sure why that works.
Hopefully this will help others in the future
Solution 2
This happened to me twice, after macOS crashed.
Most recently I used this:
Fix 1
- Run
postgres -D /usr/local/var/postgres
-
Copy the number after
PID
if you see something like this:FATAL: lock file "postmaster.pid" already exists HINT: Is another postmaster (PID 379) running in data directory "/usr/local/var/postgres"?
kill -9 PID
with the process # in place ofPID
.
The steps that worked for me previously:
Fix 2
brew update
brew upgrade
brew postgresql-upgrade-database
Solution 3
- Delete the database
rumbl_dev
in postgresql to make a fresh start. -
If you like, you can try md5 auth for the dev version on localhost by adding the following line to the pg_hba.conf
# host DATABASE USER ADDRESS METHOD host rumbl_dev elixir localhost md5
Note: See here for more on setting up the /etc/postsgresql/9.4/pg_hba.conf and change the settings as you see fit.
-
Add the complete settings with password to
dev.exs
:config :rumbl, Rumbl.Repo, adapter: Ecto.Adapters.Postgres, username: "elixir", database: "rumbl_dev", hostname: "localhost", password: "***password***", pool_size: 10
Try running
mix do ecto.create, ecto.migrate
and see how it goes.
Hope this helps, if not, I'm out of ideas here.
Related videos on Youtube
Comments
-
Will about 4 years
I am beginning my Elixir/Phoenix journey and having some trouble with my postgres connection.
When I start up my server I get:
$ 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
Being new to Elixir, Phoenix, and Ecto I am unclear how to debug this problem. Any suggestions as to what my problem is or how I might go about debugging it would be much appreciated.
My app's set up
I have a basic app
mix phoenix.new rumbl cd rumbl mix deps.get mix deps.compile
My config/dev.exs has the following db setup
# Configure your database config :rumbl, Rumbl.Repo, adapter: Ecto.Adapters.Postgres, username: "elixir", database: "rumbl_dev", hostname: "localhost", pool_size: 10
When I run
mix ecto.create
there are no errors and I can see therumbl_dev
when I run\l
in psql. It is owned by the elixir user too.Running
mix ecto.migrate
throws the same connections errorsMy pg_hba.conf file has the following
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
Here is what I see when I log in with 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=>
-
stephen_m over 7 yearsCan you try adding the password to the config and see if that helps.
config :rumbl, Rumbl.Repo, adapter: Ecto.Adapters.Postgres, username: "elixir", database: "rumbl_dev", hostname: "localhost", password: "***password***" pool_size: 10
-
Will over 7 yearsI tried that too but get the same results - thanks for the suggestion @stephen_m
-
stephen_m over 7 yearscan you try running the following command from the terminal:
psql --dbname=rumbl_dev --username=elixir --host=127.0.0.1 --password
-
Aleksei Matiushkin over 7 years
hostname: "localhost"
⇒hostname: "127.0.0.1"
might help. -
Will over 7 years@stephen_m I appended the result of that to my question. It lets me in no problem.
-
Will over 7 years@mudasobwa I had tried that but same result
-
Aleksei Matiushkin over 7 yearsAfter all, do you have
{:phoenix_ecto, "~> 3.0"}, {:postgrex, ">= 0.0.0"}
in yourmix.exs
’ deps? -
stephen_m over 7 yearsis this line somewhere in your
config/dev.exs
? ---config :rumbl, ecto_repos: [Rumbl.Repo]
, if not can you add it and try ecto migration then? -
Will over 7 years@stephen_m that was in my
config/config.exs
file but I tried it inconfig/dev.exs
also but got the same result unfortunately -
Will over 7 years@mudasobwa my
mix.exs
has exactly those in the lock they come through as"postgrex": {:hex, :postgrex, "0.11.2", ...}
and"phoenix_ecto": {:hex, :phoenix_ecto, "3.0.1", ...}
-
-
Will over 7 yearssame result I am afraid :(
-
stephen_m over 7 yearsglad it worked. don't know why
mix ecto.create
part works though. you could check it on the console too for the portpsql --dbname=rumbl_dev --username=elixir --host=127.0.0.1 --port=5432 --password
-
Will over 7 years@stephen_m - it does not work on the console with port=5432. It is odd that the create works.
-
neo over 7 yearsgreat! thanks so much, I'm using boxen as well. specifying
port: 15432
onconfig.dev.ex
s solved it. -
Daryl Spitzer over 4 yearsFix 1 worked for me (after macOS crashed). Thank you.
-
Apie about 4 yearsSame here. My macOS crashed. Seems to be happening more recently. Came back to postgres giving the same problem and this Fix 1 fixed it for me. The accepted answer seems like a different issue.