Merge pull request #3829 from rockandror/remove-duplicated-local-census-records-on-deployment

Remove duplicated local census records on deployment
This commit is contained in:
Javier Martín
2019-11-08 15:39:53 +01:00
committed by GitHub
3 changed files with 60 additions and 0 deletions

View File

@@ -43,6 +43,7 @@ namespace :deploy do
before :starting, "rvm1:install:rvm"
before :starting, "rvm1:install:ruby"
before :starting, "install_bundler_gem"
before "deploy:migrate", "remove_local_census_records_duplicates"
after "deploy:migrate", "add_new_settings"
after :publishing, "deploy:restart"
@@ -68,6 +69,16 @@ task :install_bundler_gem do
end
end
task :remove_local_census_records_duplicates do
on roles(:db) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, "local_census_records:remove_duplicates"
end
end
end
end
task :refresh_sitemap do
on roles(:app) do
within release_path do

View File

@@ -0,0 +1,13 @@
namespace :local_census_records do
desc "Remove duplicated records from database"
task remove_duplicates: :environment do
ids = LocalCensusRecord.group(:document_type, :document_number).pluck("MIN(id) as id")
duplicates = LocalCensusRecord.count - ids.size
if duplicates > 0
ApplicationLogger.new.info "Removing local census records duplicates"
LocalCensusRecord.where("id NOT IN (?)", ids).destroy_all
ApplicationLogger.new.info "Removed #{duplicates} records."
end
end
end

View File

@@ -0,0 +1,36 @@
require "rails_helper"
require Rails.root.join("db", "migrate", "20190530082138_add_unique_index_to_local_census_records")
describe "LocalCensusRecord tasks" do
let(:run_rake_task) do
Rake::Task["local_census_records:remove_duplicates"].reenable
Rake.application.invoke_task("local_census_records:remove_duplicates")
end
describe "#remove_duplicates" do
around do |example|
ActiveRecord::Migration.suppress_messages do
example.run
end
end
before { AddUniqueIndexToLocalCensusRecords.new.down }
after { AddUniqueIndexToLocalCensusRecords.new.up }
it "Remove all duplicates keeping older records" do
record1 = create(:local_census_record, document_type: "1", document_number: "#DOCUMENT_NUMBER")
record2 = create(:local_census_record, document_type: "2", document_number: "#DOCUMENT_NUMBER")
dup_record1 = build(:local_census_record, document_type: "1", document_number: "#DOCUMENT_NUMBER")
dup_record1.save!(validate: false)
dup_record2 = build(:local_census_record, document_type: "2", document_number: "#DOCUMENT_NUMBER")
dup_record2.save!(validate: false)
record3 = create(:local_census_record, document_type: "3", document_number: "#DOCUMENT_NUMBER")
expect(LocalCensusRecord.count).to eq(5)
run_rake_task
expect(LocalCensusRecord.all).to match_array([record1, record2, record3])
end
end
end