为什么 Phoenix (ecto/Postgresx) 在开发中连接失败
Why does Phoenix (ecto/Postgresx) fail to Connect in dev
我正在开始我的 Elixir/Phoenix 旅程,但我的 postgres 连接遇到了一些问题。
当我启动我的服务器时,我得到:
$ 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
作为 Elixir、Phoenix 和 Ecto 的新手,我不清楚如何调试这个问题。任何关于我的问题是什么或我如何调试它的建议将不胜感激。
我的应用已设置
我有一个基本的应用程序
mix phoenix.new rumbl
cd rumbl
mix deps.get
mix deps.compile
我的 config/dev.exs 具有以下数据库设置
# Configure your database
config :rumbl, Rumbl.Repo,
adapter: Ecto.Adapters.Postgres,
username: "elixir",
database: "rumbl_dev",
hostname: "localhost",
pool_size: 10
当我 运行 mix ecto.create
时没有错误,当我在 psql 中 运行 \l
时我可以看到 rumbl_dev
。它也归 elixir 用户所有。
运行 mix ecto.migrate
抛出相同的连接错误
我的 pg_hba.conf 文件有以下内容
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
这是我使用 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=>
您需要在配置块中包含数据库用户的密码。
config :rumbl, Rumbl.Repo,
adapter: Ecto.Adapters.Postgres,
username: "elixir",
password: "???",
database: "rumbl_dev",
hostname: "localhost",
pool_size: 10
- 删除 postgresql 中的数据库
rumbl_dev
以重新开始。
如果你愿意,你可以通过在 pg_hba.conf
# host DATABASE USER ADDRESS METHOD
host rumbl_dev elixir localhost md5
注意:有关设置 /etc/postsgresql/9.4/pg_hba.conf 的更多信息,请参阅此处并根据需要更改设置。
添加完整设置密码到dev.exs
:
config :rumbl, Rumbl.Repo,
adapter: Ecto.Adapters.Postgres,
username: "elixir",
database: "rumbl_dev",
hostname: "localhost",
password: "***password***",
pool_size: 10
尝试运行mix do ecto.create, ecto.migrate
看看效果如何。
希望这有帮助,如果没有,我就没主意了。
好的,我明白了。最后,这是我的一个简单错误。虽然很容易制作。
我在我的 Mac 上使用 Boxen,它出于某种原因将端口更改为 15432
。
如果 mix ecto.create
失败了,我可能会早点着陆。不确定为什么会这样。
希望这对以后的其他人有所帮助
我每次在调用 mix phoenix.server
之前不启动 Postgres 时都会遇到同样的问题。我用 https://postgresapp.com 来启动它。
这在我身上发生了两次,在 macOS 崩溃之后。
最近我使用 :
修复 1
- 运行
postgres -D /usr/local/var/postgres
复制PID
后面的数字,如果你看到这样的:
FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 379) running in data directory "/usr/local/var/postgres"?
kill -9 PID
用进程号代替 PID
。
之前对我有用的steps:
修复 2
brew update
brew upgrade
brew postgresql-upgrade-database
我正在开始我的 Elixir/Phoenix 旅程,但我的 postgres 连接遇到了一些问题。
当我启动我的服务器时,我得到:
$ 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
作为 Elixir、Phoenix 和 Ecto 的新手,我不清楚如何调试这个问题。任何关于我的问题是什么或我如何调试它的建议将不胜感激。
我的应用已设置
我有一个基本的应用程序
mix phoenix.new rumbl
cd rumbl
mix deps.get
mix deps.compile
我的 config/dev.exs 具有以下数据库设置
# Configure your database
config :rumbl, Rumbl.Repo,
adapter: Ecto.Adapters.Postgres,
username: "elixir",
database: "rumbl_dev",
hostname: "localhost",
pool_size: 10
当我 运行 mix ecto.create
时没有错误,当我在 psql 中 运行 \l
时我可以看到 rumbl_dev
。它也归 elixir 用户所有。
运行 mix ecto.migrate
抛出相同的连接错误
我的 pg_hba.conf 文件有以下内容
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
这是我使用 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=>
您需要在配置块中包含数据库用户的密码。
config :rumbl, Rumbl.Repo,
adapter: Ecto.Adapters.Postgres,
username: "elixir",
password: "???",
database: "rumbl_dev",
hostname: "localhost",
pool_size: 10
- 删除 postgresql 中的数据库
rumbl_dev
以重新开始。 如果你愿意,你可以通过在 pg_hba.conf
# host DATABASE USER ADDRESS METHOD host rumbl_dev elixir localhost md5
注意:有关设置 /etc/postsgresql/9.4/pg_hba.conf 的更多信息,请参阅此处并根据需要更改设置。
添加完整设置密码到
dev.exs
:config :rumbl, Rumbl.Repo, adapter: Ecto.Adapters.Postgres, username: "elixir", database: "rumbl_dev", hostname: "localhost", password: "***password***", pool_size: 10
尝试运行
mix do ecto.create, ecto.migrate
看看效果如何。
希望这有帮助,如果没有,我就没主意了。
好的,我明白了。最后,这是我的一个简单错误。虽然很容易制作。
我在我的 Mac 上使用 Boxen,它出于某种原因将端口更改为 15432
。
如果 mix ecto.create
失败了,我可能会早点着陆。不确定为什么会这样。
希望这对以后的其他人有所帮助
我每次在调用 mix phoenix.server
之前不启动 Postgres 时都会遇到同样的问题。我用 https://postgresapp.com 来启动它。
这在我身上发生了两次,在 macOS 崩溃之后。
最近我使用
修复 1
- 运行
postgres -D /usr/local/var/postgres
复制
PID
后面的数字,如果你看到这样的:FATAL: lock file "postmaster.pid" already exists HINT: Is another postmaster (PID 379) running in data directory "/usr/local/var/postgres"?
kill -9 PID
用进程号代替PID
。
之前对我有用的steps:
修复 2
brew update
brew upgrade
brew postgresql-upgrade-database