5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-09-29 17:26:55 +00:00

Merge branch 'rails' into staging

This commit is contained in:
f 2021-05-17 14:40:59 -03:00
commit 9473fa7b93
7 changed files with 38 additions and 11 deletions

View file

@ -29,10 +29,13 @@ serve: /etc/hosts
# make rails args="db:migrate" # make rails args="db:migrate"
rails: rails:
$(hain) 'cd /Sutty/sutty; bundle exec rails $(args)' $(MAKE) bundle args="exec rails $(args)"
rake: rake:
$(hain) 'cd /Sutty/sutty; bundle exec rake $(args)' $(MAKE) bundle args="exec rake $(args)"
bundle:
$(hain) 'cd /Sutty/sutty; bundle $(args)'
# Servir JS con el dev server. # Servir JS con el dev server.
# Esto acelera la compilación del javascript, tiene que correrse por separado # Esto acelera la compilación del javascript, tiene que correrse por separado

View file

@ -72,7 +72,8 @@ class SitesController < ApplicationController
authorize site authorize site
# XXX: Convertir en una máquina de estados? # 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) redirect_to site_posts_path(site, locale: site.default_locale)
end end

View file

@ -8,13 +8,20 @@ class DeployJob < ApplicationJob
def perform(site, notify = true) def perform(site, notify = true)
ActiveRecord::Base.connection_pool.with_connection do ActiveRecord::Base.connection_pool.with_connection do
@site = Site.find(site) @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! # Asegurarse que DeployLocal sea el primero!
@deployed = { deploy_local: deploy_locally } @deployed = { deploy_local: deploy_locally }
# No es opcional # No es opcional
unless @deployed[:deploy_local] unless @deployed[:deploy_local]
@site.update_attribute :status, 'waiting' @site.update status: 'waiting'
notify_usuaries if notify notify_usuaries if notify
# Hacer fallar la tarea # Hacer fallar la tarea
@ -23,7 +30,7 @@ class DeployJob < ApplicationJob
deploy_others deploy_others
notify_usuaries if notify notify_usuaries if notify
@site.update_attribute :status, 'waiting' @site.update status: 'waiting'
end end
end end
# rubocop:enable Metrics/MethodLength # rubocop:enable Metrics/MethodLength

View file

@ -8,7 +8,7 @@ class MetadataDocumentDate < MetadataTemplate
end end
def value_from_document def value_from_document
return nil unless document.path return nil if post.new?
document.date document.date
end end

View file

@ -55,9 +55,7 @@ class Post
public_send(attr)&.value = args[attr] if args.key?(attr) public_send(attr)&.value = args[attr] if args.key?(attr)
end end
# XXX: No usamos Post#read porque a esta altura todavía no sabemos document.read! unless new?
# nada del Document
document.read! if File.exist? document.path
end end
def inspect def inspect

View file

@ -306,14 +306,25 @@ class Site < ApplicationRecord
# Poner en la cola de compilación # Poner en la cola de compilación
def enqueue! def enqueue!
!enqueued? && update_attribute(:status, 'enqueued') update(status: 'enqueued') if waiting?
end end
# Está en la cola de compilación? # 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? def enqueued?
status == 'enqueued' status == 'enqueued'
end end
def waiting?
status == 'waiting'
end
def building?
status == 'building'
end
# Cargar el sitio Jekyll # Cargar el sitio Jekyll
# #
# TODO: En lugar de leer todo junto de una vez, extraer la carga de # TODO: En lugar de leer todo junto de una vez, extraer la carga de

View file

@ -102,6 +102,13 @@ class SitesControllerTest < ActionDispatch::IntegrationTest
'index.html')) 'index.html'))
end 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 test 'se pueden actualizar' do
name = SecureRandom.hex name = SecureRandom.hex
design = Design.all.where.not(id: @site.design_id).sample design = Design.all.where.not(id: @site.design_id).sample