From 7cfd55e12669938efd67c636137e07e34b247031 Mon Sep 17 00:00:00 2001 From: f Date: Sun, 1 Aug 2021 21:48:49 -0300 Subject: [PATCH] =?UTF-8?q?Cada=20Deploy=20tiene=20un=20hostname=20=C3=BAn?= =?UTF-8?q?ico=20guardado=20en=20la=20base=20de=20datos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Con esto simplificamos la gestión de nombres de dominio, porque podemos validar en la base de datos que solo hay uno por Deploy. La migración recupera la información que antes guardábamos serializada como JSON en la base de datos. --- .../20210801060844_add_hostname_to_deploys.rb | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 db/migrate/20210801060844_add_hostname_to_deploys.rb diff --git a/db/migrate/20210801060844_add_hostname_to_deploys.rb b/db/migrate/20210801060844_add_hostname_to_deploys.rb new file mode 100644 index 0000000..8183564 --- /dev/null +++ b/db/migrate/20210801060844_add_hostname_to_deploys.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +# Recupera la funcionalidad que estamos deprecando. +module AddValuesToDeploy + extend ActiveSupport::Concern + + included do + store :values, accessors: %i[hostname onion], coder: JSON + end +end + +# Convertir todos los valores serializados de Deploy en una columna, +# porque al final el único uso que tuvo fue para guardar los hostnames +# alternativos. +# +# ¡El hostname es único para poder evitar que haya duplicados! +class AddHostnameToDeploys < ActiveRecord::Migration[6.1] + # Crea una columna temporal y guarda todos los valores. Los traspasa + # y luego elimina la columna. + def up + Deploy.include AddValuesToDeploy + # Ya que estamos hacer limpieza. + Deploy.where(site_id: nil).destroy_all + + add_column :deploys, :hostname_tmp, :string + + Site.find_each do |site| + site.deploys.find_each do |deploy| + deploy.hostname_tmp = deploy.values[:hostname] || deploy.values[:onion] || deploy.hostname + end + end + + rename_column :deploys, :hostname_tmp, :hostname + remove_column :deploys, :values + + add_index :deploys, :hostname, unique: true + # A esta altura todos los dominios deberían estar migrados. + change_column :deploys, :hostname, :string, null: false + end + + # Recupera los valores desde la columna creada. + def down + Deploy.include AddValuesToDeploy + + rename_column :deploys, :hostname, :hostname_tmp + add_column :deploys, :values, :text + + Site.find_each do |site| + site.deploys.find_each do |deploy| + deploy.values[(deploy.is_a? DeployHiddenService ? :onion : :hostname)] = deploy.hostname_tmp + end + end + + remove_column :deploys, :hostname_tmp + end +end