mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-24 14:16:22 +00:00
tener los sitios en un solo directorio y vincular a los directorios de las usuarias
en realidad no sería estrictamente necesario vincularlos porque no estamos haciendo uso directo de esos directorios. tiene utilidad cuando estamos administrando desde el sistema de archivos quizás.
This commit is contained in:
parent
79b24b72da
commit
b3a7e3c2ea
5 changed files with 96 additions and 18 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -24,3 +24,5 @@
|
||||||
|
|
||||||
/_sites/*
|
/_sites/*
|
||||||
/_deploy/*
|
/_deploy/*
|
||||||
|
/_usuarias/*
|
||||||
|
/_invitadxs/*
|
||||||
|
|
|
@ -297,8 +297,8 @@ class Site
|
||||||
#
|
#
|
||||||
# Si comparten gestión con otras usuarias, se hacen links simbólicos
|
# Si comparten gestión con otras usuarias, se hacen links simbólicos
|
||||||
# entre sí.
|
# entre sí.
|
||||||
def self.site_path_for(usuaria)
|
def self.site_path_for(site)
|
||||||
File.join(Site.site_path, usuaria.username)
|
File.join(Site.site_path, site)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Comprueba que el directorio parezca ser de jekyll
|
# Comprueba que el directorio parezca ser de jekyll
|
||||||
|
@ -333,17 +333,39 @@ class Site
|
||||||
Jekyll::Site.new(config)
|
Jekyll::Site.new(config)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Obtener todos los directorios de sitios asociados a esta usuaria
|
def self.cached?(site)
|
||||||
def self.all_for(usuaria)
|
@sites_cache[site.to_sym].present?
|
||||||
Pathname.new(Site.site_path_for(usuaria))
|
end
|
||||||
.children.map(&:expand_path).map(&:to_s).map do |j|
|
|
||||||
|
|
||||||
|
# Carga un sitio y lo cachea
|
||||||
|
def self.find_by_dir(dir)
|
||||||
|
@sites_cache ||= {}
|
||||||
|
site = File.basename(dir).to_sym
|
||||||
|
@sites_cache[site] ||= Dir.chdir(dir) do
|
||||||
|
jekyll = Site.load_jekyll(Dir.pwd)
|
||||||
|
Site.new(jekyll: jekyll, path: dir)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Encuentra un sitio
|
||||||
|
def self.find(site)
|
||||||
|
dir = Site.site_path_for(site)
|
||||||
|
return nil unless Site.jekyll? dir
|
||||||
|
|
||||||
|
Site.find_by_dir(dir)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Devuelve todos los directorios de los sitios
|
||||||
|
def self.all_dirs
|
||||||
|
Pathname.new(Site.site_path).children.map(&:expand_path).map(&:to_s)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Obtiene todos los sitios
|
||||||
|
def self.all
|
||||||
|
Site.all_dirs.map do |j|
|
||||||
next unless Site.jekyll? j
|
next unless Site.jekyll? j
|
||||||
|
|
||||||
Dir.chdir(j) do
|
Site.find_by_dir(j)
|
||||||
jekyll = Site.load_jekyll(Dir.pwd)
|
|
||||||
Site.new(jekyll: jekyll, path: j)
|
|
||||||
end
|
|
||||||
end.compact
|
end.compact
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,8 +11,18 @@ class Usuaria < OpenStruct
|
||||||
Usuaria.new(username: username)
|
Usuaria.new(username: username)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def path
|
||||||
|
File.join(Rails.root, '_usuarias', username)
|
||||||
|
end
|
||||||
|
|
||||||
|
def site_dirs
|
||||||
|
Pathname.new(path).children.map(&:expand_path).map(&:to_s)
|
||||||
|
end
|
||||||
|
|
||||||
# Obtener todos los sitios de esta usuaria
|
# Obtener todos los sitios de esta usuaria
|
||||||
def sites
|
def sites
|
||||||
@sites ||= Site.all_for(self)
|
@sites ||= site_dirs.map do |site|
|
||||||
|
Site.find(File.basename(site))
|
||||||
|
end.compact
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
41
bin/migrate_directories
Executable file
41
bin/migrate_directories
Executable file
|
@ -0,0 +1,41 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
test -f _sites/.migrated && exit 0
|
||||||
|
|
||||||
|
# Crear los directorios donde van las usuarias e invitadxs
|
||||||
|
mkdir -p _usuarias _invitadxs
|
||||||
|
|
||||||
|
# Recorrer todos los sitios
|
||||||
|
for site in _sites/*/*; do
|
||||||
|
# Obtener la ubicación real de los sitios
|
||||||
|
real_site="$(readlink -f "${site}")"
|
||||||
|
# Obtener el nombre dentro de Sutty
|
||||||
|
site_name="$(basename "${site}")"
|
||||||
|
|
||||||
|
# Mover los directorios a donde van
|
||||||
|
if ! test -e "_sites/${site_name}" ; then
|
||||||
|
# Si son symlinks, mantener el symlink, sino mover el directorio
|
||||||
|
if test -L "${site}" ; then
|
||||||
|
ln -s "${real_site}" "_sites/${site_name}"
|
||||||
|
else
|
||||||
|
mv "${site}" "_sites/${site_name}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tipo in usuarias invitadxs; do
|
||||||
|
test -f "${real_site}/.${tipo}" || continue
|
||||||
|
cat "${real_site}/.${tipo}" | while read usuaria; do
|
||||||
|
# Crear los directorios de las usuarias y lxs invitadxs
|
||||||
|
mkdir -p "_${tipo}/${usuaria}"
|
||||||
|
# Linkear el sitio
|
||||||
|
ln -s "../../_sites/${site_name}" "_${tipo}/${usuaria}/${site_name}"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# Elimina los directorios de las usuarias e invitadxs
|
||||||
|
cat _sites/*/.usuarias _sites/*/.invitadxs | while read u; do
|
||||||
|
rm -rf "_sites/${u}"
|
||||||
|
done
|
||||||
|
|
||||||
|
touch _sites/.migrated
|
|
@ -7,28 +7,31 @@ En un deploy con capistrano, se vería así:
|
||||||
|
|
||||||
ls /srv/http/sutty.kefir.red/shared/_sites
|
ls /srv/http/sutty.kefir.red/shared/_sites
|
||||||
|
|
||||||
|
cyber-women.com
|
||||||
|
|
||||||
|
ls /srv/http/sutty.kefir.red/shared/_usuarias
|
||||||
|
|
||||||
hola@kefir.red
|
hola@kefir.red
|
||||||
persona@kefir.red
|
persona@kefir.red
|
||||||
|
|
||||||
Donde `hola@kefir.red` es el directorio de trabajo de la habitante.
|
Donde `hola@kefir.red` es el directorio de trabajo de la habitante.
|
||||||
Dentro de ese, están los sitios:
|
Dentro de ese, están los sitios:
|
||||||
|
|
||||||
ls /srv/http/sutty.kefir.red/shared/_sites/hola@kefir.red
|
ls /srv/http/sutty.kefir.red/shared/_usuarias/hola@kefir.red
|
||||||
|
|
||||||
cyber-women.com
|
cyber-women.com
|
||||||
|
|
||||||
Cada sitio está identificado por su nombre de dominio, para que sea más
|
Cada sitio se almacena (o se vincula) en `_sites` y está identificado
|
||||||
simple saber de qué se trata.
|
por su nombre de dominio, para que sea más simple saber de qué se trata.
|
||||||
|
|
||||||
Si quisiéramos dar acceso a `persona@kefir.red` solo hay que hacer un
|
Si quisiéramos dar acceso a `persona@kefir.red` solo hay que hacer un
|
||||||
link simbólico.
|
link simbólico.
|
||||||
|
|
||||||
cd /srv/http/sutty.kefir.red/shared/_sites/persona@kefir.red
|
cd /srv/http/sutty.kefir.red/shared/_usuarias/persona@kefir.red
|
||||||
ln -sv ../hola@kefir.red/cyber-women.com .
|
ln -sv ../../_sites/cyber-women.com .
|
||||||
|
|
||||||
De esta forma vinculamos el sitio `cyber-women.com` a la cuenta
|
De esta forma vinculamos el sitio `cyber-women.com` a la cuenta
|
||||||
`persona@kefir.red`, compartiendo los mismos archivos con
|
`persona@kefir.red`.
|
||||||
`hola@kefir.red`.
|
|
||||||
|
|
||||||
## Deploy
|
## Deploy
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue