web-dev-qa-db-ja.com

フェニックス(ecto / Postgresx)が開発者の接続に失敗する理由

私はエリクサー/フェニックスの旅を始めており、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=>
12
Will

わかりました、それで私はそれを理解しました。それは結局のところ、私の側の単純な間違いです。作るのは簡単ですが。

MacでBoxenを使用していますが、何らかの理由でポートが15432に変更されます。

mix ecto.createが失敗した場合、私はこれにより早く着陸した可能性があります。それがうまくいく理由がわかりません。

うまくいけば、これは将来的に他の人を助けるでしょう

5
Will

macOSがクラッシュした後、これは私に2回起こりました。

最近使用した this

修正1

  1. postgres -D /usr/local/var/postgresを実行します
  2. 次のような場合は、PIDの後に数字をコピーします。

    FATAL:  lock file "postmaster.pid" already exists 
    HINT:   Is another postmaster (PID 379) running in data directory "/usr/local/var/postgres"?
    
  3. kill -9 PIDPIDの代わりにプロセス#に置き換えます。


以前私のために働いた steps

修正2

brew update
brew upgrade
brew postgresql-upgrade-database
3
Nelu
  • Postgresqlのデータベース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を実行してみて、どうなるか見てみましょう。

これが役に立たないことを願っています。

2
stephen_m

設定ブロック内にデータベースユーザーのパスワードを含める必要があります。

config :rumbl, Rumbl.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "elixir",
  password: "???",
  database: "rumbl_dev",
  hostname: "localhost",
  pool_size: 10
0
aholt

mix phoenix.serverを呼び出す前にPostgresを起動しないと、毎回同じ問題が発生します。 https://postgresapp.com を使用して開始します。

0
nambatee