2021-08-02 00:48:49 +00:00
|
|
|
# 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
|
2021-09-12 23:40:18 +00:00
|
|
|
# Ya que estamos hacer limpieza, eliminando deploys sin sitios
|
|
|
|
Deploy.where(site_id: nil).delete_all
|
|
|
|
Deploy.where.not(site_id: Site.all.pluck(:id)).delete_all
|
2021-08-02 00:48:49 +00:00
|
|
|
|
|
|
|
add_column :deploys, :hostname_tmp, :string
|
|
|
|
|
|
|
|
Site.find_each do |site|
|
2021-09-12 23:40:18 +00:00
|
|
|
# Temporalmente cambiar el nombre del sitio para que los hostnames
|
|
|
|
# se generen bien, pero los cambios de nombre reales los vamos a
|
|
|
|
# hacer manualmente.
|
|
|
|
site.name = site.name.split('.', 2).first if site.name.include?('.')
|
|
|
|
|
2021-08-02 00:48:49 +00:00
|
|
|
site.deploys.find_each do |deploy|
|
2021-09-12 23:51:24 +00:00
|
|
|
hostname = (deploy.values[:hostname] || deploy.values[:onion] || deploy.hostname || "#{SecureRandom.hex}.invalid").dup.sub(/\.\z/, '')
|
|
|
|
deploy.update_columns hostname_tmp: hostname
|
2021-08-02 00:48:49 +00:00
|
|
|
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
|