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/*
|
||||
/_deploy/*
|
||||
/_usuarias/*
|
||||
/_invitadxs/*
|
||||
|
|
|
@ -297,8 +297,8 @@ class Site
|
|||
#
|
||||
# Si comparten gestión con otras usuarias, se hacen links simbólicos
|
||||
# entre sí.
|
||||
def self.site_path_for(usuaria)
|
||||
File.join(Site.site_path, usuaria.username)
|
||||
def self.site_path_for(site)
|
||||
File.join(Site.site_path, site)
|
||||
end
|
||||
|
||||
# Comprueba que el directorio parezca ser de jekyll
|
||||
|
@ -333,17 +333,39 @@ class Site
|
|||
Jekyll::Site.new(config)
|
||||
end
|
||||
|
||||
# Obtener todos los directorios de sitios asociados a esta usuaria
|
||||
def self.all_for(usuaria)
|
||||
Pathname.new(Site.site_path_for(usuaria))
|
||||
.children.map(&:expand_path).map(&:to_s).map do |j|
|
||||
def self.cached?(site)
|
||||
@sites_cache[site.to_sym].present?
|
||||
end
|
||||
|
||||
# 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
|
||||
|
||||
Dir.chdir(j) do
|
||||
jekyll = Site.load_jekyll(Dir.pwd)
|
||||
Site.new(jekyll: jekyll, path: j)
|
||||
end
|
||||
Site.find_by_dir(j)
|
||||
end.compact
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,8 +11,18 @@ class Usuaria < OpenStruct
|
|||
Usuaria.new(username: username)
|
||||
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
|
||||
def sites
|
||||
@sites ||= Site.all_for(self)
|
||||
@sites ||= site_dirs.map do |site|
|
||||
Site.find(File.basename(site))
|
||||
end.compact
|
||||
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
|
||||
|
||||
cyber-women.com
|
||||
|
||||
ls /srv/http/sutty.kefir.red/shared/_usuarias
|
||||
|
||||
hola@kefir.red
|
||||
persona@kefir.red
|
||||
|
||||
Donde `hola@kefir.red` es el directorio de trabajo de la habitante.
|
||||
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
|
||||
|
||||
Cada sitio está identificado por su nombre de dominio, para que sea más
|
||||
simple saber de qué se trata.
|
||||
Cada sitio se almacena (o se vincula) en `_sites` y está identificado
|
||||
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
|
||||
link simbólico.
|
||||
|
||||
cd /srv/http/sutty.kefir.red/shared/_sites/persona@kefir.red
|
||||
ln -sv ../hola@kefir.red/cyber-women.com .
|
||||
cd /srv/http/sutty.kefir.red/shared/_usuarias/persona@kefir.red
|
||||
ln -sv ../../_sites/cyber-women.com .
|
||||
|
||||
De esta forma vinculamos el sitio `cyber-women.com` a la cuenta
|
||||
`persona@kefir.red`, compartiendo los mismos archivos con
|
||||
`hola@kefir.red`.
|
||||
`persona@kefir.red`.
|
||||
|
||||
## Deploy
|
||||
|
||||
|
|
Loading…
Reference in a new issue