Refactorizar DeployLocal
En realidad no hay mucho cambio interno, pero se deprecaron algunos métodos de Deploy y se ajustaron otros.
This commit is contained in:
parent
e1664d0c12
commit
e1749d6c70
1 changed files with 35 additions and 20 deletions
|
@ -1,11 +1,9 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
# Alojamiento local, solo genera el sitio, con lo que no necesita hacer
|
# Alojamiento local, genera el sitio como si corriéramos `jekyll build`.
|
||||||
# nada más
|
|
||||||
class DeployLocal < Deploy
|
class DeployLocal < Deploy
|
||||||
store :values, accessors: %i[], coder: JSON
|
# Asegurarse que el hostname es el permitido.
|
||||||
|
before_save :default_hostname!
|
||||||
before_destroy :remove_destination!
|
|
||||||
|
|
||||||
# Realizamos la construcción del sitio usando Jekyll y un entorno
|
# Realizamos la construcción del sitio usando Jekyll y un entorno
|
||||||
# limpio para no pasarle secretos
|
# limpio para no pasarle secretos
|
||||||
|
@ -20,42 +18,48 @@ class DeployLocal < Deploy
|
||||||
jekyll_build
|
jekyll_build
|
||||||
end
|
end
|
||||||
|
|
||||||
# Sólo permitimos un deploy local
|
|
||||||
def limit
|
|
||||||
1
|
|
||||||
end
|
|
||||||
|
|
||||||
# Obtener el tamaño de todos los archivos y directorios (los
|
# Obtener el tamaño de todos los archivos y directorios (los
|
||||||
# directorios son archivos :)
|
# directorios son archivos :)
|
||||||
|
#
|
||||||
|
# @return [Integer]
|
||||||
def size
|
def size
|
||||||
paths = [destination, File.join(destination, '**', '**')]
|
paths = [destination, File.join(destination, '**', '**')]
|
||||||
|
|
||||||
Dir.glob(paths).map do |file|
|
Dir.glob(paths).map do |file|
|
||||||
if File.symlink? file
|
File.symlink?(file) ? 0 : File.size(file)
|
||||||
0
|
|
||||||
else
|
|
||||||
File.size(file)
|
|
||||||
end
|
|
||||||
end.inject(:+)
|
end.inject(:+)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# La ubicación del sitio luego de generarlo.
|
||||||
|
#
|
||||||
|
# @return [String]
|
||||||
def destination
|
def destination
|
||||||
File.join(Rails.root, '_deploy', site.hostname)
|
File.join(Rails.root, '_deploy', hostname)
|
||||||
|
end
|
||||||
|
|
||||||
|
# El hostname es el nombre del sitio más el dominio principal.
|
||||||
|
#
|
||||||
|
# @return [String]
|
||||||
|
def default_hostname
|
||||||
|
"#{site.name}.#{Site.domain}"
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# Crea el directorio destino si no existe.
|
||||||
def mkdir
|
def mkdir
|
||||||
FileUtils.mkdir_p destination
|
FileUtils.mkdir_p destination
|
||||||
end
|
end
|
||||||
|
|
||||||
# Un entorno que solo tiene lo que necesitamos
|
# Un entorno que solo tiene lo que necesitamos
|
||||||
|
#
|
||||||
|
# @return [Hash]
|
||||||
def env
|
def env
|
||||||
# XXX: This doesn't support Windows paths :B
|
# XXX: This doesn't support Windows paths :B
|
||||||
paths = [File.dirname(`which bundle`), '/usr/bin', '/bin']
|
paths = [File.dirname(`which bundle`), '/usr/bin', '/bin']
|
||||||
|
|
||||||
{
|
{
|
||||||
'HOME' => home_dir,
|
'HOME' => site.path,
|
||||||
'PATH' => paths.join(':'),
|
'PATH' => paths.join(':'),
|
||||||
'SPREE_API_KEY' => site.tienda_api_key,
|
'SPREE_API_KEY' => site.tienda_api_key,
|
||||||
'SPREE_URL' => site.tienda_url,
|
'SPREE_URL' => site.tienda_url,
|
||||||
|
@ -66,10 +70,15 @@ class DeployLocal < Deploy
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# @return [String]
|
||||||
def yarn_lock
|
def yarn_lock
|
||||||
File.join(site.path, 'yarn.lock')
|
File.join(site.path, 'yarn.lock')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Determina si este proyecto se gestiona con Yarn, buscando si el
|
||||||
|
# archivo yarn.lock existe.
|
||||||
|
#
|
||||||
|
# @return [Boolean]
|
||||||
def yarn_lock?
|
def yarn_lock?
|
||||||
File.exist? yarn_lock
|
File.exist? yarn_lock
|
||||||
end
|
end
|
||||||
|
@ -79,12 +88,15 @@ class DeployLocal < Deploy
|
||||||
end
|
end
|
||||||
|
|
||||||
# Corre yarn dentro del repositorio
|
# Corre yarn dentro del repositorio
|
||||||
|
#
|
||||||
|
# @return [Boolean,Nil]
|
||||||
def yarn
|
def yarn
|
||||||
return unless yarn_lock?
|
run 'yarn' unless yarn_lock?
|
||||||
|
|
||||||
run 'yarn'
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Instala las dependencias.
|
||||||
|
#
|
||||||
|
# @return [Boolean]
|
||||||
def bundle
|
def bundle
|
||||||
if Rails.env.production?
|
if Rails.env.production?
|
||||||
run %(bundle install --no-cache --path="#{gems_dir}")
|
run %(bundle install --no-cache --path="#{gems_dir}")
|
||||||
|
@ -93,6 +105,9 @@ class DeployLocal < Deploy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Genera el sitio.
|
||||||
|
#
|
||||||
|
# @return [Boolean]
|
||||||
def jekyll_build
|
def jekyll_build
|
||||||
run %(bundle exec jekyll build --trace --profile --destination "#{escaped_destination}")
|
run %(bundle exec jekyll build --trace --profile --destination "#{escaped_destination}")
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue