バックグラウンドでmongodbサーバーを実行できる簡単なスクリプトを作成しようとしています。現在、Process.spawn
メソッドを使用しています。動作しますが、プロセスが完全に機能するまでしばらく待つ必要がmongod
あります (ブート プロセスが完了し、データベースが新しい接続を待機しています)。
def run!
return if running?
FileUtils.mkdir_p(MONGODB_DBPATH)
command = "mongod --port #{port} --dbpath #{MONGODB_DBPATH} --nojournal"
log_file = File.open(File.expand_path("log/test_mongod.log"), "w+")
@pid = Process.spawn(command, out: log_file)
# TODO wait for the connection (waiting for connections on port xxxx)
sleep 2
yield port if block_given?
end
このスクリプトの全文は次のとおりです: https://github.com/lucassus/mongo_browser/blob/master/spec/support/mongod.rb#L22
sleep 2
この醜い恣意性をこのコードから削除することは何とか可能ですか?
私の最初の推測は、生成されたプロセスにパイプを接続し、「ポート xxxx で接続を待機しています」というメッセージがパイプに書き込まれるまで待つことです。しかし、私はそれを実装する方法がわかりません。