Merge branch 'rails' into staging
This commit is contained in:
commit
9473fa7b93
7 changed files with 38 additions and 11 deletions
7
Makefile
7
Makefile
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue