私はエリクサー/フェニックスの旅を始めており、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には次のdbセットアップがあります
# 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でrumbl_dev
を実行すると\l
が表示されます。それもエリクサーユーザーが所有しています。
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=>
わかりました、それで私はそれを理解しました。それは結局のところ、私の側の単純な間違いです。作るのは簡単ですが。
MacでBoxenを使用していますが、何らかの理由でポートが15432
に変更されます。
mix ecto.create
が失敗した場合、私はこれにより早く着陸した可能性があります。それがうまくいく理由がわかりません。
うまくいけば、これは将来的に他の人を助けるでしょう
macOSがクラッシュした後、これは私に2回起こりました。
最近使用した this :
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 :
brew update
brew upgrade
brew postgresql-upgrade-database
rumbl_dev
を削除して、新たに開始します。必要に応じて、次の行をpg_hba.confに追加して、localhostのdevバージョンのmd5 authを試すことができます
# 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
を実行してみて、どうなるか見てみましょう。
これが役に立たないことを願っています。
設定ブロック内にデータベースユーザーのパスワードを含める必要があります。
config :rumbl, Rumbl.Repo,
adapter: Ecto.Adapters.Postgres,
username: "elixir",
password: "???",
database: "rumbl_dev",
hostname: "localhost",
pool_size: 10
mix phoenix.server
を呼び出す前にPostgresを起動しないと、毎回同じ問題が発生します。 https://postgresapp.com を使用して開始します。