From ed2f700440bb8efb73be3e16734db7c9d198f756 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 17 Jan 2022 17:45:39 +0000 Subject: [PATCH] DEV: Wait for initdb to complete in docker.rake (#15614) On slower hardware it can take a while to init the database. If we don't wait, the `rake db:create` step will fail. --- lib/tasks/docker.rake | 5 ++++- script/start_test_db.rb | 20 ++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/tasks/docker.rake b/lib/tasks/docker.rake index 90bc68d040c..8a914d428fa 100644 --- a/lib/tasks/docker.rake +++ b/lib/tasks/docker.rake @@ -102,8 +102,11 @@ task 'docker:test' do puts "Starting background redis" @redis_pid = Process.spawn('redis-server --dir tmp/test_data/redis') + puts "Initializing postgres" + system("script/start_test_db.rb --skip-run", exception: true) + puts "Starting postgres" - @pg_pid = Process.spawn("script/start_test_db.rb --exec") + @pg_pid = Process.spawn("script/start_test_db.rb --skip-setup --exec") ENV["RAILS_ENV"] = "test" # this shaves all the creation of the multisite db off diff --git a/script/start_test_db.rb b/script/start_test_db.rb index 280a6347f28..f9a4d871c84 100755 --- a/script/start_test_db.rb +++ b/script/start_test_db.rb @@ -8,23 +8,31 @@ def run(*args) system(*args, exception: true) end +should_setup = true +should_run = true should_exec = false while a = ARGV.pop - if a == "--exec" + if a == "--skip-setup" + should_setup = false + elsif a == "--skip-run" + should_run = false + elsif a == "--exec" should_exec = true else raise "Unknown argument #{a}" end end -run "#{BIN}/initdb -D #{DATA}" +if should_setup + run "#{BIN}/initdb -D #{DATA}" -run "echo fsync = off >> #{DATA}/postgresql.conf" -run "echo full_page_writes = off >> #{DATA}/postgresql.conf" -run "echo shared_buffers = 500MB >> #{DATA}/postgresql.conf" + run "echo fsync = off >> #{DATA}/postgresql.conf" + run "echo full_page_writes = off >> #{DATA}/postgresql.conf" + run "echo shared_buffers = 500MB >> #{DATA}/postgresql.conf" +end if should_exec exec "#{BIN}/postmaster -D #{DATA}" -else +elsif should_run run "#{BIN}/pg_ctl -D #{DATA} start" end