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 回プローブし、その後エラーを発生させたいと考えています。どうすればいいですか?
ありがとう。