新しいアプリケーションを作成するときに他のエンジニアが複製するPhoenixリポジトリがあります。データベースのないPhoenix Repoでログが多すぎます
私は、そのデータベースが設定される前に、エンジニアは通常生産にフェニックス・サーバを配備prod.exs
config :foo, Foo.Repo,
adapter: Ecto.Adapters.Postgres,
url: {:system, "DATABASE_URL"},
pool_size: 1
に次きました。エンジニアは数日以内にデータベースをセットアップしますが、その間に私の問題は、これが私のログシステムが扱いにくい膨大な量のログメッセージを生成することです。
ここにログメッセージがあります。
15:48:29.496 [error] GenServer #PID<0.20959.1> terminating
** (KeyError) key :database not found in: [hostname: "localhost", username: "foo", types: Ecto.Adapters.Postgres.TypeModule, port: 5432, name: Foo.Repo.Pool, otp_app: :foo, repo: Foo.Repo, adapter: Ecto.Adapters.Postgres, pool_size: 1, pool_timeout: 5000, timeout: 15000, adapter: Ecto.Adapters.Postgres, url: {:system, "DATABASE_URL"}, pool_size: 1, pool: DBConnection.Poolboy]
(elixir) lib/keyword.ex:333: Keyword.fetch!/2
(postgrex) lib/postgrex/protocol.ex:76: Postgrex.Protocol.connect/1
(db_connection) lib/db_connection/connection.ex:134: DBConnection.Connection.connect/2
(connection) lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
15:48:29.496 [error] GenServer #PID<0.20960.1> terminating
** (KeyError) key :database not found in: [hostname: "localhost", username: "foo", types: Ecto.Adapters.Postgres.TypeModule, port: 5432, name: Foo.Repo.Pool, otp_app: :foo, repo: Foo.Repo, adapter: Ecto.Adapters.Postgres, pool_size: 1, pool_timeout: 5000, timeout: 15000, adapter: Ecto.Adapters.Postgres, url: {:system, "DATABASE_URL"}, pool_size: 1, pool: DBConnection.Poolboy]
(elixir) lib/keyword.ex:333: Keyword.fetch!/2
(postgrex) lib/postgrex/protocol.ex:76: Postgrex.Protocol.connect/1
(db_connection) lib/db_connection/connection.ex:134: DBConnection.Connection.connect/2
(connection) lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
15:48:29.497 [error] GenServer #PID<0.20961.1> terminating
私はエラーを修正する方法を知っているが、最終的にDATABASE_URL
環境変数を設定するには、エンジニアの責任です。エンジニアが最初にクローンを作成するPhoenixアプリテンプレートリポジトリのみを変更できます。
prod.exs
を変更する方法はありますか?DATABASE_URL
のないアプリでは大量のログが生成されません。
ような何か私はこれが関連している場合は考えているが、私の最高の推測では、max_restartが、ここで0に設定されているので、これが起こるということです。https://github.com/elixir-ecto/db_connection/blob/d0cbabaa0eacd67d3b4cdaa84e2c3082c500f8ac /lib/db_connection/ownership/pool.ex#L11 –
これは、backoff_typeが次のように設定されている場合もあります。 https://github.com/elixir-ecto/ecto/blob/master/lib/ecto/adapters/postgres.ex#L218 –