# frozen_string_literal: true # Realiza el deploy de un sitio class DeployJob < ApplicationJob def perform(site) ActiveRecord::Base.connection_pool.with_connection do site = Site.find(site) site.update_attribute :status, 'building' # Asegurarse que DeployLocal sea el primero! deployed = { deploy_local: deploy_local(site) } # No es opcional unless deployed[:deploy_local] site.update_attribute :status, 'waiting' raise end deploy_others site, deployed notify_usuaries site, deployed site.update_attribute :status, 'waiting' end end private def deploy_local(site) site.deploys.find_by(type: 'DeployLocal').deploy end def deploy_others(site, deployed) site.deploys.where.not(type: 'DeployLocal').find_each do |d| deployed[d.type.underscore.to_sym] = d.deploy end end def notify_usuaries(site, deployed) # TODO: existe site.usuaries_ids? site.usuaries.find_each do |usuarie| DeployMailer.with(usuarie: usuarie.id, site: site.id) .deployed(deployed) .deliver_now end end end