PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Errore di rilascio Rails + Postgres:al database è in corso l'accesso da parte di altri utenti

Se interrompi le connessioni postgresql in esecuzione per la tua applicazione, puoi eseguire db:drop bene. Quindi come uccidere quelle connessioni? Uso la seguente attività di rastrello:

# lib/tasks/kill_postgres_connections.rake
task :kill_postgres_connections => :environment do
  db_name = "#{File.basename(Rails.root)}_#{Rails.env}"
  sh = <<EOF
ps xa \
  | grep postgres: \
  | grep #{db_name} \
  | grep -v grep \
  | awk '{print $1}' \
  | xargs kill
EOF
  puts `#{sh}`
end

task "db:drop" => :kill_postgres_connections

Se si eliminano le connessioni da sotto i binari, a volte si vomita la prossima volta che si tenta di caricare una pagina, ma ricaricandola di nuovo si ristabilisce la connessione.