Migrando mi blog de Nikola a Sphinx#

Migrar de un generador estático a otro no es un proceso del todo transparente, así que aquí te explico algunos por menores para hacer una migración de Nikola a Sphinx.

Pero antes, es necesario tener presente, que lo básico del proceso de migración, inicia por tener lo mínimo desde cero, con Sphinx. Para este fin, debes seguir las indicaciones dadas en Crear un blog con Sphinx.

Migrando#

Bueno, una vez tenemos la base de nuestro blog, sigue hacer los ajustes para que nuestras entradas previas sigan funcionando.

Publicación#

Front matter#

Dado que en la configuración inicial añadimos un patrón de ruta para las publicaciones, no es necesario agregar la directiva de ..post: o el atributo de :blogpost: true. Solo ubica los archivos en la ruta que cumpla el patrón 👀.

Importante, en Nikola definíamos la ruta de navegación mediante el ..slug:, pero esto en Sphinx depende del nombre del archivo y su ruta en el directorio. Asegurate de usar la misma ruta de directorios al definido en el slug y el nombre del archivo igual a la parte final de este 👀. Otra opción, es que sin importar el nombre y ruta de directorios, uses el valor del slug como valor de :redirect: (en este caso, añade al archivo de configuración post_redirect_refresh=0).

Para indicar el título en Nikola, se usaba el atributo de .. title:, pero ahora este debe ser explícito en la marcación de la publicación. Ejemplo:

Migrando mi blog de Nikola a Sphinx
===================================
# Migrando mi blog de Nikola a Sphinx

Esto hace que los títulos ya existentes, deban aumentar de nivel 👀.

En ablog no tenemos el equivalente del ..status: de Nikola, pero se puede controlar que una fecha actual o pasada sea equivalente a published y si es una fecha futura o sin fecha es el equivalente de draft. El caso del private podríamos hacerlo excluyendo el archivo. El caso featured es más personalizado, pero se podría explorar con el objeto de las cards en el índice.

Si queremos indicar la imagen de previsualización, en Nikola se usaba .. previewimage:, pero en ablog lo hacemos con :image: y el valor no es la ruta de la imagen, sino el número asociado en orden de aparición en la publicación. Esto se puede dejar con un valor por defecto acorde a la variable en el archivo de configuración de post_auto_image.

El atributo de .. description: es tomado por defecto por truncamiento del primer párrafo de la publicación (esto se usa en los metadatos de la publicación), pero también podemos dejarlo si lo queremos personalizado (esto se hace con la extensión de open-graph).

El caso de .. link: se debe convertir en :external_link:.

Para la las actualizaciones, esto en lugar de ser un atributo, pasa a ser una anotación con marca de tiempo, pero con información de contexto.

.. update:: 2011-12-15

   Se añade info extra
```{update} 2011-12-15

Se añade info extra
```

Con los atributos de .. nocomments:, .. tags:, .. date:, .. author: y .. category:, basta con cambiar .. inicial por :.

Respecto a la fecha es importante tener claro, que a diferencia de Nikola no podemos mezclar tipos de formato de fecha. Estos deben añadirse según la definición que se tenga en el archivo de configuración, en la variable post_date_format.

No es necesario un atributo para habilitar las ecuaciones, ya que Sphinx las habilita por defecto. En Nikola era necesario con .. has_math: true.

El caso de .. type: no posee equivalente.

⚠️ Si estamos usando markdown, la diferencia es quitar el : inicial, tal como se evidencia en la sección de primera publicación, y el separador <!-- --> pasa a ---.

Contenido#

En algunos casos, podíamos recurrir a listados de publicaciones mediante algún filtro con .. post-list:: y el atributo de :categories. Esto ahora pasa a .. postlist:: con el atributo :category: (puedes usar otros filtros también).

Respecto a .. thumbnail:: esta directiva no existe, y se reemplaza por .. figure::.

La definición del teaser en Nikola dependía de una marcación específica como directiva para el texto, pero en ablog esto es controlado por el atributo :excerpt:, para denotar el número de párrafos a incluir. Pero podemos dejarlo con un valor por defecto acorde a post_auto_excerpt en el archivo de configuración.

Para las referencias a documentos, en Markdown pasamos de {{% doc %}} path {{% /doc %}} a <project:path> o [](path), mientras que en RST podemos mantener :doc: siempre y cuando no apunte a una etiqueta, en cuyo caso sería :ref:.

Configuración#

Archivos en el raíz#

Los archvos en el raíz, se definen en un directorio que disponemos con la variable html_extra_path, la cual podemos definir con el mismo nombre que viene en Nikola (files).

Sistema de comentarios#

Si usamos Disqus (en Nikola, COMMENT_SYSTEM='disqus'), el disqus_shortname en el archivo de configuración toma el valor del antiguo COMMENT_SYSTEM_ID.

Nota

La verdad, he decidido retirar el sistema de comentarios de Disqus. Aporta poco valor respecto a lo que introduce en tiempo de carga. Posiblemente explore disponer el enlace de la publicación en Mastodon para que se desarrolle la eventual discusión.

Youtube#

Necesitamos instalar sphinxcontrib-youtube y habilitar sphinxcontrib.youtube en las extensiones. De esta forma, la directiva de .. youtube:: sigue tal cual.

Referencias#