diff --git a/app/models/site.rb b/app/models/site.rb index 72b112ad..25cbbd0b 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -54,8 +54,7 @@ class Site < ApplicationRecord before_create :clone_skel! # Elimina el directorio al destruir un sitio before_destroy :remove_directories! - # Cambiar el nombre del directorio - before_update :update_name! + before_save :add_private_key_if_missing! # Guardar la configuración si hubo cambios after_save :sync_attributes_with_config! @@ -488,12 +487,6 @@ class Site < ApplicationRecord FileUtils.rm_rf path end - def update_name! - return unless name_changed? - - FileUtils.mv path_was, path - reload_jekyll! - end # Sincroniza algunos atributos del sitio con su configuración y # guarda los cambios diff --git a/app/services/site_service.rb b/app/services/site_service.rb index 762c8728..eeef0b3f 100644 --- a/app/services/site_service.rb +++ b/app/services/site_service.rb @@ -88,6 +88,23 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do result.present? end + def rename(name) + return if name == site.name + moved = false + site.name = name + + Site.transaction do + raise ActiveRecord::Rollback if File.exists?(site.path) + FileUtils.mv (site.path_was, site.path) + moved = true + ActiveStorage::Blob.where(service_name: site.name_was).update_all(service_name: site.name) + site.save + rescue StandardError + FileUtils.mv (site.path, site.path_was) if moved + raise + end + end + private # Guarda los cambios de la configuración en el repositorio git