負荷分散 - Elixir Ecto データベース接続の問題を検出するにはどうすればよいですか?
Ecto 経由で Postgres データベースに接続する Elixir プロジェクトを書いています。データベース サーバーはアプリケーション自体とは別のサーバー上にあり、同じハードウェアで実行されている場合よりも、Elixir プロジェクトに影響を与えない停止の影響を受けやすくなります。
アプリケーションが正常に起動すると、データベースへの接続は自動的に行われるようで、すべて正常に動作します。しかし、エラーが発生した場合接続されていない場合、Ecto は単にログにエラーをスローします。
私がやりたいことは、現在の接続状態を検出し、その情報を単純な接続パスを介して外部ロード バランサーに報告することです。これにより、アクティブな接続を持つ別のサーバーにトラフィックをルーティングできるようになります
問題は、ログを聞く以外に、Ecto がデータベースへの実行可能な接続を持っているかどうかを判断する方法がわからないことです。データベースへの接続が復元されました。
Ecto 接続があるかどうかを判断するために何を呼び出すことができますか? できればその接続に対して非操作クエリを実行せずに、セクションが稼働していて使用可能ですか?
------------に答える------------
<ブロック引用>
Ecto は単にエラーをログに記録します。
これは、接続に対してバックトラッキングが有効になっているデフォルトの戦略です。バックオフを無効にすることができますrepo オプションで backoff_type を :stop に設定し、自分でエラーを処理してください。
<ブロック引用>Ecto 接続が有効かどうかを判断するには、何を呼び出せばよいでしょうか?可能であれば、その接続に対して無効なクエリを実行する必要はありませんか?
使用するだけで、接続が「使用可能」かどうかを確認できると思います:)
try do
Ecto.Adapters.SQL.query(MyApp.Repo, "SELECT 1")
rescue
e in DBConnection.ConnectionError -> :down
end
ちなみに、上記のモジュールは、接続のデフォルトのプール モジュールです。その内部を信頼して(そうではなく)、手動で支払いを行うことができます。このグループの代わりに独自のグループを実装できます:)
------------に答える------------
データベースへの接続が有効で使用可能かどうかを検出するには、:gen_tcp.connect/3 を使用して Ecto の外部に直接接続してみてください。コードは次のようになります:
case :gen_tcp.connect('127.0.0.1', 5432, []) do
{:ok, _} ->
# code for handling ok scenario
{:error, error} ->
# code for handling error scenario. Typically, you'll get the econnrefused error when the server is down
end
Ecto は Mix q 設定を介して接続するサーバーの詳細を取得することに注意してくださいそのために構成されています。接続するサーバーを変更したい場合は、 Application.put_env/4 を実行してから、Ecto が新しい設定を認識するように Ecto リポジトリを再起動する必要があります。例:
Application.put_env(:my_app, MyApp.Repo, [adapter: Ecto.Adapters.Postgres, username: "postgres", password: "postgres",database: "new_db", hostname: "different_host.com", pool_size: 20])
Supervisor.stop(MyApp.Repo)
タグ:
関連記事:
javascript - PHPでスラッシュをエンコードするURL - コードログ
Android: Firebase データに変更がない場合でも、onStartCommand() メソッドが複数回呼び出されます
- 今日からカラオケ店の店長になるのですが......
- 狭い道の擦れ違い ぶつけたほうが悪い?
- 人付き合い嫌いで一人好きなのに人との絡みを求める
- iphoneのSIMフリー版とキャリア版の違いは?
- 顔写真の画像に★マークを付けたい
- 「『安倍晋三の夫人』付き職員」とは?
- DMMのIDとPASSは一人一つしか持てませんか?
- 男性に聞きます。あなたは専業主夫になりたいですか?
- micronと言うメーカーの温度ヒューズがほしい
- Outlook2013が送受信できない
- PM-840修理方法
- 異動で職場の好きな人と別れるのがつらい
- 携帯代を安くしたい!ラインモバイルがいいですかね?
- 大学時代のゼミの男に告白したらフラれました
- スズメバチの習性 7回目