From f664cce0da7b1f561713eb3a11b2937fa080a0bc Mon Sep 17 00:00:00 2001 From: f Date: Sun, 12 Sep 2021 22:22:56 -0300 Subject: [PATCH] Eliminar los hostnames duplicados --- .../20210801060844_add_hostname_to_deploys.rb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/db/migrate/20210801060844_add_hostname_to_deploys.rb b/db/migrate/20210801060844_add_hostname_to_deploys.rb index e8e02881..78510b09 100644 --- a/db/migrate/20210801060844_add_hostname_to_deploys.rb +++ b/db/migrate/20210801060844_add_hostname_to_deploys.rb @@ -7,7 +7,7 @@ module AddValuesToDeploy included do store :values, accessors: %i[hostname onion], coder: JSON - puts "XXX: Al incluir este módulo todas las migraciones siguientes van a fallar. Podés correrlas de nuevo para arreglarlas." + puts 'XXX: Al incluir este módulo todas las migraciones siguientes van a fallar. Podés correrlas de nuevo para arreglarlas.' end end @@ -34,7 +34,9 @@ class AddHostnameToDeploys < ActiveRecord::Migration[6.1] site.name = site.name.split('.', 2).first if site.name.include?('.') site.deploys.find_each do |deploy| - hostname = (deploy.values[:onion] || deploy.values[:hostname] || deploy.hostname || "#{SecureRandom.hex}.invalid").dup.sub(/\.\z/, '') + hostname = (deploy.values[:onion] || deploy.values[:hostname] || deploy.hostname || "#{SecureRandom.hex}.invalid").dup.sub( + /\.\z/, '' + ) deploy.update_columns hostname_tmp: hostname end end @@ -42,6 +44,17 @@ class AddHostnameToDeploys < ActiveRecord::Migration[6.1] rename_column :deploys, :hostname_tmp, :hostname remove_column :deploys, :values + # Eliminar los dominios duplicados para un mismo sitio, siempre + # y cuando no sean DeployLocal. + columns = %i[site_id hostname] + Deploy.group(*columns).pluck(*columns).each do |duplicated| + deploys = Deploy.where(columns.zip(duplicated).to_h).order(:created_at).pluck(:id, :type) + + next unless deploys.size > 1 + + Deploy.where(id: deploys.reject { |d| d.last == 'DeployLocal' }.map(&:first)).delete_all + end + add_index :deploys, :hostname, unique: true # A esta altura todos los dominios deberían estar migrados. change_column :deploys, :hostname, :string, null: false