From 0f4288d91de7b48f7bbed832ca80246b0055cc64 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Sun, 9 Aug 2026 16:03:40 +0200 Subject: Drop nodes.external_url The column moved to page.rb and was now written only by publish_draft! and by the chapter seed, and read by nothing. lib/tasks/pages.rake goes with it. backfill_external_url reads the dropped column. backfill_address is spent and no longer safe to re-run. --- app/models/node.rb | 2 - ...0260809135746_remove_external_url_from_nodes.rb | 5 ++ db/seeds/chapters.rb | 3 +- lib/tasks/pages.rake | 61 ---------------------- test/models/node_test.rb | 1 - 5 files changed, 7 insertions(+), 65 deletions(-) create mode 100644 db/migrate/20260809135746_remove_external_url_from_nodes.rb delete mode 100644 lib/tasks/pages.rake diff --git a/app/models/node.rb b/app/models/node.rb index a401ed69..6fc6c3dc 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -257,8 +257,6 @@ class Node < ApplicationRecord self.slug = self.head.slug end - self.external_url = self.head.external_url - if self.head.parent_node_id && self.head.parent_node_id != parent_id new_parent = Node.find_by(:id => self.head.parent_node_id) diff --git a/db/migrate/20260809135746_remove_external_url_from_nodes.rb b/db/migrate/20260809135746_remove_external_url_from_nodes.rb new file mode 100644 index 00000000..0510d053 --- /dev/null +++ b/db/migrate/20260809135746_remove_external_url_from_nodes.rb @@ -0,0 +1,5 @@ +class RemoveExternalUrlFromNodes < ActiveRecord::Migration[8.1] + def change + remove_column :nodes, :external_url, :string + end +end diff --git a/db/seeds/chapters.rb b/db/seeds/chapters.rb index 4d81e3cc..ba14252c 100644 --- a/db/seeds/chapters.rb +++ b/db/seeds/chapters.rb @@ -30,12 +30,13 @@ def seed_chapter(parent_id:, slug:, tag:, title_de:, description_de:, end # Create node - node = parent.children.create!(slug: slug, external_url: external_url) + node = parent.children.create!(slug: slug) node.reload # Set up draft with German translation draft = node.draft draft.template_name = 'chapter_detail' + draft.external_url = external_url I18n.with_locale(:de) do draft.title = title_de draft.abstract = location || "" diff --git a/lib/tasks/pages.rake b/lib/tasks/pages.rake deleted file mode 100644 index ea0776b7..00000000 --- a/lib/tasks/pages.rake +++ /dev/null @@ -1,61 +0,0 @@ -namespace :pages do - desc "Backfill pages.slug and pages.parent_node_id from each page's " \ - "node. Historical accuracy is not attempted. Every revision gets " \ - "the node's current address, which is right for head and draft and " \ - "harmless for older revisions, and avoids nil checks everywhere. " \ - "Dry run unless WRITE=1." - task :backfill_address => :environment do - write = ENV["WRITE"] == "1" - puts "DRY RUN -- nothing written. Re-run with WRITE=1." unless write - - touched = 0 - Node.find_each do |node| - scope = node.pages.where("slug IS DISTINCT FROM :s OR parent_node_id IS DISTINCT FROM :p", - :s => node.slug, :p => node.parent_id) - count = scope.count - next if count.zero? - - scope.update_all(:slug => node.slug, :parent_node_id => node.parent_id) if write - touched += count - end - - # Autosaves carry no node_id -- has_many :pages does not cover them. - Node.where.not(:autosave_id => nil).includes(:autosave).find_each do |node| - a = node.autosave - next if a.slug == node.slug && a.parent_node_id == node.parent_id - - a.update_columns(:slug => node.slug, :parent_node_id => node.parent_id) if write - touched += 1 - end - - puts "#{write ? "updated" : "would update"} #{touched} pages" - end - - desc "Backfill pages.external_url from each page's node." - task :backfill_external_url => :environment do - write = ENV["WRITE"] == "1" - puts "DRY RUN -- nothing written. Re-run with WRITE=1." unless write - - touched = 0 - Node.where.not(:external_url => [nil, ""]).find_each do |node| - scope = node.pages.where("external_url IS DISTINCT FROM :u", :u => node.external_url) - count = scope.count - next if count.zero? - - scope.update_all(:external_url => node.external_url) if write - touched += count - end - - # Autosaves carry no node_id, so has_many :pages does not cover them. - Node.where.not(:autosave_id => nil).where.not(:external_url => [nil, ""]) - .includes(:autosave).find_each do |node| - a = node.autosave - next if a.nil? || a.external_url == node.external_url - - a.update_columns(:external_url => node.external_url) if write - touched += 1 - end - - puts "#{write ? "updated" : "would update"} #{touched} pages" - end -end diff --git a/test/models/node_test.rb b/test/models/node_test.rb index 735d2abe..39be6d32 100644 --- a/test/models/node_test.rb +++ b/test/models/node_test.rb @@ -1077,7 +1077,6 @@ class NodeTest < ActiveSupport::TestCase node.draft.update!(:external_url => "https://example.org") node.publish_draft!(users(:aaron)) - assert_equal "https://example.org", node.reload.external_url assert_equal "https://example.org", node.head.external_url end -- cgit v1.3