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:
@@ -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
|
||||
|
||||
13
lib/tasks/local_census_records.rake
Normal file
13
lib/tasks/local_census_records.rake
Normal 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
|
||||
36
spec/lib/tasks/local_census_records_spec.rb
Normal file
36
spec/lib/tasks/local_census_records_spec.rb
Normal 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
|
||||
Reference in New Issue
Block a user