问题
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=>
回答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
回答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
回答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.
回答4:
You need to include your database user's password within your config block.
config :rumbl, Rumbl.Repo,
adapter: Ecto.Adapters.Postgres,
username: "elixir",
password: "???",
database: "rumbl_dev",
hostname: "localhost",
pool_size: 10
回答5:
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.
来源:https://stackoverflow.com/questions/39091408/why-does-phoenix-ecto-postgresx-fail-to-connect-in-dev