mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-25 20:36:22 +00:00
Merge branch 'build-once-at-a-time' into 'rails'
compilar el sitio de a uno por vez See merge request sutty/sutty!27
This commit is contained in:
commit
9c288b896c
4 changed files with 31 additions and 5 deletions
|
@ -72,7 +72,8 @@ class SitesController < ApplicationController
|
|||
authorize site
|
||||
|
||||
# XXX: Convertir en una máquina de estados?
|
||||
DeployJob.perform_async site.id if site.enqueue!
|
||||
site.enqueue!
|
||||
DeployJob.perform_async site.id
|
||||
|
||||
redirect_to site_posts_path(site, locale: site.default_locale)
|
||||
end
|
||||
|
|
|
@ -8,13 +8,20 @@ class DeployJob < ApplicationJob
|
|||
def perform(site, notify = true)
|
||||
ActiveRecord::Base.connection_pool.with_connection do
|
||||
@site = Site.find(site)
|
||||
@site.update_attribute :status, 'building'
|
||||
|
||||
# Si ya hay una tarea corriendo, aplazar esta
|
||||
if @site.building?
|
||||
DeployJob.perform_in(60, site, notify)
|
||||
return
|
||||
end
|
||||
|
||||
@site.update status: 'building'
|
||||
# Asegurarse que DeployLocal sea el primero!
|
||||
@deployed = { deploy_local: deploy_locally }
|
||||
|
||||
# No es opcional
|
||||
unless @deployed[:deploy_local]
|
||||
@site.update_attribute :status, 'waiting'
|
||||
@site.update status: 'waiting'
|
||||
notify_usuaries if notify
|
||||
|
||||
# Hacer fallar la tarea
|
||||
|
@ -23,7 +30,7 @@ class DeployJob < ApplicationJob
|
|||
|
||||
deploy_others
|
||||
notify_usuaries if notify
|
||||
@site.update_attribute :status, 'waiting'
|
||||
@site.update status: 'waiting'
|
||||
end
|
||||
end
|
||||
# rubocop:enable Metrics/MethodLength
|
||||
|
|
|
@ -303,14 +303,25 @@ class Site < ApplicationRecord
|
|||
|
||||
# Poner en la cola de compilación
|
||||
def enqueue!
|
||||
!enqueued? && update_attribute(:status, 'enqueued')
|
||||
update(status: 'enqueued') if waiting?
|
||||
end
|
||||
|
||||
# Está en la cola de compilación?
|
||||
#
|
||||
# TODO: definir todos estos métodos dinámicamente, aunque todavía no
|
||||
# tenemos una máquina de estados propiamente dicha.
|
||||
def enqueued?
|
||||
status == 'enqueued'
|
||||
end
|
||||
|
||||
def waiting?
|
||||
status == 'waiting'
|
||||
end
|
||||
|
||||
def building?
|
||||
status == 'building'
|
||||
end
|
||||
|
||||
# Cargar el sitio Jekyll
|
||||
#
|
||||
# TODO: En lugar de leer todo junto de una vez, extraer la carga de
|
||||
|
|
|
@ -102,6 +102,13 @@ class SitesControllerTest < ActionDispatch::IntegrationTest
|
|||
'index.html'))
|
||||
end
|
||||
|
||||
test 'no se pueden encolar varias veces seguidas' do
|
||||
assert_enqueued_jobs 2 do
|
||||
post site_enqueue_url(@site), headers: @authorization
|
||||
post site_enqueue_url(@site), headers: @authorization
|
||||
end
|
||||
end
|
||||
|
||||
test 'se pueden actualizar' do
|
||||
name = SecureRandom.hex
|
||||
design = Design.all.where.not(id: @site.design_id).sample
|
||||
|
|
Loading…
Reference in a new issue