Enlaces de la carta en prod apuntaban a Tailscale (/fea) + parser de portada acoplado al prefijo /fea #100

Closed
opened 2026-06-28 19:14:39 +00:00 by rafa · 0 comments
Owner

Problema

En producción (wp-nuevo.feadulta.com) los enlaces dentro de la carta semanal (y de muchas traducciones) apuntaban a la URL local de Tailscale: https://farmer.taild3aaf6.ts.net/fea/<slug>/. Para cualquier visitante eso es un host inaccesible → enlaces rotos.

Causa raíz

Al desplegar contenido local → prod se copió el post_content tal cual, que arrastra las URLs absolutas del entorno local (farmer.taild3aaf6.ts.net/fea/...). Es justo el riesgo documentado en master-feadulta.md ("NO copiar post_content local→prod, mete URLs de Tailscale").

Alcance medido: 93 posts con el host, 1320 ocurrencias, todas con prefijo /fea. postmeta y options limpios (0). Afecta a la carta 46956 «Entre todos» + sus 4 traducciones y a ~88 traducciones de cartas/artículos anteriores.

Segundo problema acoplado (descubierto al corregir)

El parser de portada fea_url_to_post_id() (fea-carta-portada.php) reconocía un enlace interno buscando el segmento /fea/ hardcodeado, que solo existe en la estructura local (WP en subcarpeta /fea). En prod la instalación cuelga de la raíz (wp-nuevo.feadulta.com/<slug>), sin /fea. Por eso, al corregir las URLs, el parser dejó de reconocerlas y la sección Evangelio/Artículos de la portada se vaciaba (caía al fallback). Es decir: el fix de URLs y el parser estaban acoplados.

Fix aplicado (2026-06-18)

  1. Search-replace en prod (solo wp_posts.post_content):
    https://farmer.taild3aaf6.ts.net/feahttps://wp-nuevo.feadulta.com
    → 93 reemplazos, 0 ocurrencias restantes. Backup previo del contenido de los 93 posts en /entrada/tailscale_fix_backup_20260618-083532.json (+ copia local en backups/).
  2. Parser agnóstico al entorno (fea_url_to_post_id): ya no depende de /fea. Deriva el slug del path relativo a home_url() y descarta hosts externos (home_url() host ≠ host del enlace → null). Funciona igual en local (home en .../fea) y en prod (home en la raíz). Desplegado en local y prod (md5 idéntico).

Verificación

  • Carta 46956: 0 enlaces a Tailscale, 21 a wp-nuevo.feadulta.com.
  • Portada prod resuelve: evangelio 8, artículos 7, eucaristía 5.
  • Tests unitarios del parser: URL local /fea/slug → OK, URL prod /slug → OK (en su entorno), host externo (edicionesfeadulta.com) → null.

Pendiente / fix de raíz (recurrente)

  • El deploy de cada carta nueva debe hacer este search-replace de Tailscale→prod (o transformar el contenido sobre las URLs de prod) para no reintroducir el problema cada semana. Ver feadulta-ciclo-carta-nueva.
  • Nota aparte (no es regresión): la sección Multimedia de la carta resuelve 0 porque sus 7 enlaces son URLs legacy Joomla con categoría (es/indice-multimedia/<k2id>-….html, es/videos/…) que no casan con el patrón /item/<id>-….html del resolutor. Nunca resolvieron en prod. Mejorar el resolutor Joomla para cubrir /<cat>/<k2id>-slug.html es un issue separado.
## Problema En **producción** (wp-nuevo.feadulta.com) los enlaces dentro de la carta semanal (y de muchas traducciones) apuntaban a la URL **local de Tailscale**: `https://farmer.taild3aaf6.ts.net/fea/<slug>/`. Para cualquier visitante eso es un host inaccesible → enlaces rotos. ## Causa raíz Al desplegar contenido local → prod se copió el `post_content` tal cual, que arrastra las URLs absolutas del entorno local (`farmer.taild3aaf6.ts.net/fea/...`). Es justo el riesgo documentado en `master-feadulta.md` ("NO copiar post_content local→prod, mete URLs de Tailscale"). **Alcance medido:** 93 posts con el host, **1320 ocurrencias**, todas con prefijo `/fea`. `postmeta` y `options` limpios (0). Afecta a la carta 46956 «Entre todos» + sus 4 traducciones y a ~88 traducciones de cartas/artículos anteriores. ## Segundo problema acoplado (descubierto al corregir) El parser de portada `fea_url_to_post_id()` (`fea-carta-portada.php`) reconocía un enlace interno buscando el segmento **`/fea/`** hardcodeado, que solo existe en la estructura **local** (WP en subcarpeta `/fea`). En prod la instalación cuelga de la **raíz** (`wp-nuevo.feadulta.com/<slug>`), sin `/fea`. Por eso, al corregir las URLs, el parser dejó de reconocerlas y la sección Evangelio/Artículos de la portada se vaciaba (caía al fallback). Es decir: el fix de URLs y el parser estaban acoplados. ## Fix aplicado (2026-06-18) 1. **Search-replace en prod** (solo `wp_posts.post_content`): `https://farmer.taild3aaf6.ts.net/fea` → `https://wp-nuevo.feadulta.com` → 93 reemplazos, 0 ocurrencias restantes. Backup previo del contenido de los 93 posts en `/entrada/tailscale_fix_backup_20260618-083532.json` (+ copia local en `backups/`). 2. **Parser agnóstico al entorno** (`fea_url_to_post_id`): ya no depende de `/fea`. Deriva el slug del **path relativo a `home_url()`** y descarta hosts externos (`home_url()` host ≠ host del enlace → null). Funciona igual en local (home en `.../fea`) y en prod (home en la raíz). Desplegado en local y prod (md5 idéntico). ## Verificación - Carta 46956: 0 enlaces a Tailscale, 21 a wp-nuevo.feadulta.com. - Portada prod resuelve: evangelio 8, artículos 7, eucaristía 5. - Tests unitarios del parser: URL local `/fea/slug` → OK, URL prod `/slug` → OK (en su entorno), host externo (edicionesfeadulta.com) → null. ## Pendiente / fix de raíz (recurrente) - El **deploy de cada carta nueva** debe hacer este search-replace de Tailscale→prod (o transformar el contenido sobre las URLs de prod) para no reintroducir el problema cada semana. Ver `feadulta-ciclo-carta-nueva`. - **Nota aparte (no es regresión):** la sección **Multimedia** de la carta resuelve 0 porque sus 7 enlaces son URLs legacy Joomla con categoría (`es/indice-multimedia/<k2id>-….html`, `es/videos/…`) que no casan con el patrón `/item/<id>-….html` del resolutor. Nunca resolvieron en prod. Mejorar el resolutor Joomla para cubrir `/<cat>/<k2id>-slug.html` es un issue separado.
rafa closed this issue 2026-06-28 19:14:39 +00:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rafa/feadulta#100