From 5f15f361acd191eef96db3f37a41d280b94d827b Mon Sep 17 00:00:00 2001 From: Martin Meyerhoff Date: Fri, 18 May 2018 23:20:36 +0200 Subject: [PATCH 1/2] Remove duplicate folded pages in tidy task This removes possible duplicate folded pages as part of the tidy task, in order to provide a smoother upgrade path. --- lib/alchemy/tasks/tidy.rb | 8 ++++++++ lib/tasks/alchemy/tidy.rake | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/lib/alchemy/tasks/tidy.rb b/lib/alchemy/tasks/tidy.rb index 61051c45a1..39565a4d67 100644 --- a/lib/alchemy/tasks/tidy.rb +++ b/lib/alchemy/tasks/tidy.rb @@ -117,6 +117,14 @@ def remove_orphaned_contents end end + def remove_duplicate_folded_pages + Alchemy::FoldedPage.select(:page_id, :user_id).group(:page_id, :user_id).having("count(*) > 1").each do |duplicate_page| + duplicate_page_ids = Alchemy::FoldedPage.where(duplicate_page.attributes.except("id")).pluck(:id) + duplicate_page_ids_except_oldest = duplicate_page_ids.reject { |i| i == duplicate_page_ids.min } + Alchemy::FoldedPage.where(id: duplicate_page_ids_except_oldest).delete_all + end + end + private def destroy_orphaned_records(records, class_name) diff --git a/lib/tasks/alchemy/tidy.rake b/lib/tasks/alchemy/tidy.rake index e052b7993a..df90880dd9 100644 --- a/lib/tasks/alchemy/tidy.rake +++ b/lib/tasks/alchemy/tidy.rake @@ -8,6 +8,7 @@ namespace :alchemy do Rake::Task['alchemy:tidy:element_positions'].invoke Rake::Task['alchemy:tidy:content_positions'].invoke Rake::Task['alchemy:tidy:remove_orphaned_records'].invoke + Rake::Task['alchemy:tidy:remove_duplicate_folded_pages'].invoke end desc "Creates missing cells for pages." @@ -56,5 +57,10 @@ namespace :alchemy do task remove_orphaned_contents: [:environment] do Alchemy::Tidy.remove_orphaned_contents end + + desc "Remove duplicate folded pages." + task remove_duplicate_folded_pages: [:environment] do + Alchemy::Tidy.remove_duplicate_folded_pages + end end end From 97cea0ddede86fe3a7597b80ee3c6195d994dd99 Mon Sep 17 00:00:00 2001 From: Martin Meyerhoff Date: Fri, 18 May 2018 23:21:17 +0200 Subject: [PATCH 2/2] Verify Records still exist when trying to destroy them With nested elements, we might have orphaned elements with nested elements or elements with orphaned nested elements. This change reloads the record in question in order to make sure it is still there. If not, the reload will return `nil`, and nothing terrible happens. --- lib/alchemy/tasks/tidy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/alchemy/tasks/tidy.rb b/lib/alchemy/tasks/tidy.rb index 39565a4d67..d5c4bf084a 100644 --- a/lib/alchemy/tasks/tidy.rb +++ b/lib/alchemy/tasks/tidy.rb @@ -130,7 +130,7 @@ def remove_duplicate_folded_pages def destroy_orphaned_records(records, class_name) records.each do |record| log "Destroy orphaned #{class_name}: #{record.inspect}" - record.destroy + record.reload.try(:destroy) end end end