1

scotty Web アプリと mongodb サービスが正しい順序で開始されるというばかげた問題があります。systemd を使用して最初に mongodb を起動し、次に scotty Web アプリを起動します。何らかの理由で機能しません。connect: does not exist (Connection refused)接続の準備ができていないことを意味する mongodb ドライバーからのアプリ エラー。

だから私の質問。接続の可用性を 0.5 秒間隔で 3 回テストしてからエラーになるようにするにはどうすればよいですか?

これはアプリケーションの主な機能です

main :: IO ()
main = do
  pool <- createPool (runIOE $ connect $ host "127.0.0.1") close 1 300 5
  clearSessions pool
  let r = \x -> runReaderT x pool
  scottyT 3000 r r basal

basal :: ScottyD ()
basal = do
  middleware $ staticPolicy (noDots >-> addBase "static")
  notFound $ runSession
  routes

アプリ サービスは mongodb サービスの後に注文されますが、アプリの起動中は mongodb への接続がまだ利用できません。したがって、上記のエラーが発生します。これは、正しいサービスの順序に関する質問を避けるための systemd サービス ファイルです。

[Unit]
Description=Basal Web Application
Requires=mongodb.service
After=mongodb.service iptables.service network-online.target

[Service]
User=http
Group=http
WorkingDirectory=/srv/http/basal/
ExecStart=/srv/http/basal/bin/basal
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

正しいサービス順序で mongodb への接続が利用できない理由がわかりません。したがって、haskell コードを使用して接続の可用性を 0.5 秒の遅延で 3 回プローブし、その後エラーを発生させたいと考えています。どうすればいいですか?

ありがとう。

4

1 に答える 1