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:
f 2018-09-27 14:43:13 -03:00
parent 79b24b72da
commit b3a7e3c2ea
No known key found for this signature in database
GPG key ID: F3FDAB97B5F9F7E7
5 changed files with 96 additions and 18 deletions

2
.gitignore vendored
View file

@ -24,3 +24,5 @@
/_sites/* /_sites/*
/_deploy/* /_deploy/*
/_usuarias/*
/_invitadxs/*

View file

@ -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

View file

@ -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
View 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

View file

@ -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