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 the rumbl_dev
when I run \l
in psql. It is owned by the elixir user too.
Running mix ecto.migrate
throws the same connections errors
My 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=>
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
This happened to me twice, after macOS crashed.
Most recently I used this:
Fix 1
postgres -D /usr/local/var/postgres
Copy the number after
PID
if you see something like this:kill -9 PID
with the process # in place ofPID
.The steps that worked for me previously:
Fix 2
I have the same problem every time I don't start Postgres before calling
mix phoenix.server
. I use https://postgresapp.com to kick it off.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
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
:Try running
mix do ecto.create, ecto.migrate
and see how it goes.Hope this helps, if not, I'm out of ideas here.
You need to include your database user's password within your config block.