Javi Moreno Apuntes Fichas de Lectura Archivo Sobre mi
Blog Logo

Javi


8 minutos de lectura

Octopress mola pero también tiene sus limitaciones. No es que yo sea un gran comunicador que está publicando artículos continuamente pero a veces he echado de menos no poder publicar algo más rápidamente o a una hora concreta.
Octopress es un blog estático que se genera mediante unos scripts desarrollados en Ruby y que usa git para publicar en GitHub Pages, Heroku o sitios similares. Por eso normalmente se necesita un PC/mac.
Quizá haya que ser muy friky para preferir hacer todo lo que voy a contar ahora y no usar wordpress pero, como dijo Steve McQueen en Los Siete Magníficos:

Lo nuestro es el plomo.

Claro, que un poco más adelante, en la misma película también dijo:

En aquel momento parecía una buena idea.

Este año, los Reyes Magos me trajeron una Raspberry Pi. Si ya se que ya no está tan de moda pero después de una conversación con Jorge Ortiz allá por Octubre me picó el gusanillo de usar este dispositivo para hacer pruebas de configuración de un servidor Rails. Después, pensando en lo poco que consume, que puede estar siempre encendido, que soporta ssh,… pensé que a lo mejor esta era la forma de poder publicar cosas en el blog cuando no estuviera en casa.

Organización: Borradores y Blog.

Supongo que ya lo sabréis pero Octopress se apoya mucho en git. Inicialmente pensé en tener toda la carpeta del proyecto en Dropbox para que estuviera sincronizado el contenido tanto en la Raspberry, como en el Mac, el iPhone o el iPad. Si esto funcionaba, lo único que tendría que hacer cuando hubiera terminado de escribir algo sería entrar en la RPi y hacer el deploy desde allí.
No fue una buena idea, primero porque la RPi no es el más rápido de los dispositivos y segundo porque la carpeta de un proyecto Octopress con la rama source tiene un número de ficheros que tiende a infinito y Dropbox es genial excepto cuando tienes un número muy grande de ficheros.
El plan B fue tener una carpeta en Dropbox para los borradores, tener el repositorio del blog sincronizado también con la Raspberry y mover los borradores al proyecto cuando fuera a publicar algo.

Crear una carpeta de borradores en Dropbox.

Prácticamente todos los editores markdown que hay tanto para iPhone, como para iPad como para Mac permiten guardar en Dropbox. En mi caso particular uso iA Writer en el iPhone, Editorial en el iPad y nvAlt, iA Writer o Textmate en el Mac (según me de). En todos estos editores puedo escribir los artículos, en el iPad y en el Mac además puedo hacer la postprodución del post, es decir la maquetación y uso de los plugins que aporta Octopress para que las entradas queden más vitaminadas. Además, el tener todo en Dropbox me permite empezar a escribir en el Mac, seguir escribiendo en el iPhone mientras voy en el Metro y terminar de maquetar en el iPad (porque mola mucho usar Editorial).

Para poder usar Dropbox en la Raspberry me basé en esta entrada. Es importante destacar que Dropbox en la Raspberry todavía no funciona (y no se si algún día funcionará) como funciona en nuestros dispositivos habituales: no hay sincronización. Dropbox Uploader lo que permite es descargar, subir, borrar, crear directorios y demás historias pero la sincronización es algo que, si lo quieres, te lo tienes que currar tu. En mi caso, con la descarga de Dropbox a la Raspberry es suficiente.

GitHub, Bitbucket y ramas remotas.

Aunque este blog está hospedado en GitHub, el repositorio completo (Octopress consta de dos ramas: master y source) está alojado en Bitbucket. No es que tenga nada que ocultar, simplemente que tengo cosas a medio escribir que no me apetece que se vean hasta que estén terminadas. Para poder usar Octopress en la Raspberry Pi si ya tienes el blog en algún repositorio remoto, lo único que hay que hacer es crear una clave ssh en la Raspberry (en GitHub tienen muy buenos tutoriales de como hacerlo), vincular esta clave tanto al repositorio de Bitbucket como al de GitHub y disfrutar: ya podemos clonar, hacer pull, hacer push y todas esas cosas que hacen que Octopress mole tanto. Como a todos los efectos es una nueva instalación. Cuando clonamos el proyecto tenemos que hacer el "bundle install" y volver a configurar el sistema de despliegue. Con las instrucciones del sitio de Octopress es más que suficiente.

El proceso de publicación.

Creo que todavía no lo había dicho pero en todo momento he estado accediendo a la Raspberry vía ssh. Si usas git y octopress no deberías tenerle ningún miedo al terminal por lo que acceder vía ssh al dispositivo no será tampoco un problema. Para facilitarme un poco la tarea me he creado una serie de scripts para las situaciones que me puedo encontrar con más frecuencia:

  1. Descargar los borradores y previsualizar
  2. Publicar lo que haya en la Raspberry
  3. Descargar los borradores y publicar
  4. Descargar el repositorio y previsualizar
  5. Descargar el repositorio y publicar

En todos los casos, después de publicar se hace commit en el repositorio y se suben los cambios a los servidores remotos.

./Dropbox-Uploader/dropbox_uploader.sh download ./drafts/
mv ./drafts/*.markdown ./blog/source/_posts
set -e
cd blog
rake generate
rake deploy
git add .
git commit -m "Nuevo publicación con quickpost.sh"
git push origin source

El script anterior descarga los ficheros que estén en la carpeta de borradores. A continuación, mueve los ficheros con extensión markdown a la carpeta donde se guardan los artículos en Octopress. Acto seguido genera la nueva versión del blog y lo publica. Para que los cambios sean accesibles desde cualquier lugar hace commiten la rama source y la sube al repositorio remoto. Por supuesto, cualquiera de estos pasos puede fallar. Si eso sucede el script se detiene y aquí no ha pasado nada.

El resto de scripts, giran sobre la misma idea, en algunos casos se detienen en la generación y hacen un preview, en otros casos lo que hacen es hacer un pulo al repositorio remoto,…

set -e
cd blog
git pull origin source
rake generate
rake deploy
git add .
git commit -m "Nuevo publicación con gitpost.sh”
git push origin source
set -e
./Dropbox-Uploader/dropbox_uploader.sh download ./drafts/
mv ./drafts/*.markdown ./blog/source/_posts
cd blog
rake generate
rake preview
set -e
cd blog
rake generate
rake deploy
git add .
git commit -m "Nuevo publicación con quickdeploy.sh"
git push origin source
set -e
cd blog
git pull origin source
rake generate
rake preview

Wherever I may roam

Y aquí llega el punto por el que decidí montar todo este tinglado: tenemos el repositorio del blog clonado en la Raspberry Pi, hemos creado una serie de scripts para facilitar el proceso de descarga y publicación. Para poder publicar en cualquier momento y allá donde nos encontremos solo nos faltan dos cosas: poder acceder a la Raspberry desde fuera de la red local y tener una aplicación en el iPhone o en el iPad que permitan hacer un ssh.

Lo primero lo he resuelto con no-ip un servicio gratuito que mediante la instalación de un paquete en la Raspberry y la configuración de una cuenta nos permite acceder a nuestra red como si de un servicio web se tratara. Ya no recuerdo cual es el tutorial que usé yo para configurarlo pero cualquiera que aparece al buscar “no-ip raspberry” en Google valdrá. Es algo extremadamente sencillo.

Y para lo segundo, hacía ya bastante tiempo que le había echado el ojo a Prompt de la gente de Panic. Quizá sea una aplicación cara (cuesta 7€) pero cumple su cometido a la perfección.

Conclusión.

Puede parecer una solución muy rebuscada pero cualquiera que se anime a repetir mis pasos encontrará que el proceso es muy sencillo.
Sobre el exceso de “ingeniería” para publicar el blog, la única disculpa que puedo poner es que Octopress/Jekyll me gusta mucho y quiero que sea mi sistema de blogging durante mucho tiempo. No le hago ascos a otros sistemas como Tumblr (y algún proyecto tengo por ahí que saldrá mediante ese servicio) o Medium (bastante de moda ahora) pero Octopress sigue siendo mi favorito. Además, llevo tiempo pensado en darle un giro al blog y tener una manera de publicar artículos esté donde esté o de forma “programada” mediante crontab me daría mucha agilidad.