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