
El pasado miércoles, Felipe Zayas me pidió ayuda para actualizar su bitácora, Darle a la lengua, por entonces anclada en una versión, la 2.5.1, con algo más de un año de antigüedad (se publicó el 25 de abril de 2008). Catorce meses no son nada en la historia de una vida, pero en la de las aplicaciones informáticas equivalen casi a una era geológica, como tuve ocasión de comprobar tras finalizar el proceso de actualización del blog. En efecto, nada más acceder al frontend para comprobar los resultados del cambio a WordPress 2.8, me recorrió el espinazo un escalofrío de horror (el segundo de la tarde, después del primer gol de la selección de Estados Unidos, en el partido de semifinales de la Copa Confederaciones), pues el blog mostraba caracteres extraños allí donde debían estar las vocales con tilde, las eñes y otros signos característicos de nuestro alfabeto.
Enseguida me di cuenta de que se había producido un problema con la codificación de la base de datos, por lo que acudí a Google en busca de explicaciones y posibles soluciones. Rápidamente di con un artículo del Codex de WordPress en el que se explica muy claramente el problema: resulta que hasta la versión 2.1.3, WordPress creaba las base de datos con el juego de caracteres latin1 y el cotejamiento latin1_swedish_ci. A partir de la versión 2.2., la aplicación permite al usuario definir tanto el juego de caracteres como el cotejamiento en el fichero wp-config.php, mediante las variables DB_CHARSET y DB_COLLATE. Ahora bien, esta configuración sólo sirve para nuevas instalaciones, no para las ya existentes, y de aquí que al actualizar el blog se produjera un lío mayúsculo con los caracteres del blog.
La soluciones que se han propuesto para desfacer este entuerto son tan diabólicamente complicadas (recodificación de la base de datos en el servidor, para lo cual es necesario un acceso por SSH del que no disponíamos, o, como propone el artículo del Codea de WordPress que acabo de citar, la ejecución de una larguísima serie de consultas SQL sobre la base de datos), que tras consultar con Felipe decidí volver a la versión antigua del blog, gracias a las copias de seguridad que había preparado por si tenía que enfrentarme a un desastre. La verdad es que estaba muy angustiado, porque no tenía la absoluta seguridad de que la vuelta atrás funcionara (y por entonces la selección española ya había recibido el segundo y definitivo gol que la apeaba de la final del campeonato), pero tras borrar los archivos y la base de datos nuevos y sustituirlos por los antiguos, todo funcionó correctamente.
Le propuse entonces a Felipe utilizar una vía indirecta de actualización, que he probado a plena satisfacción muchas veces, y sobre la que he escrito varios artículos, no sólo en La Bitácora del Tigre, sino también en otros blogs: en vez de renovar el sitio web sobre una versión existente, proceder a una instalación limpia de WordPress, y volcar sobre ella el archivo XML resultante de la exportación de la versión antigua. Dejé pasar unas cuantas horas de tiempo (se trabaja mejor con la mente despejada) y acometí la tarea el jueves por la tarde. En esta ocasión todo fue como la seda, y la importación del fichero XML, aunque muy lenta, se llevó a cabo sin ningún problema, lo mismo que la del fichero OPML con los enlaces del blogroll de Darle a la lengua. Me sorprendió comprobar que la última versión de WordPress permite importar un fichero de hasta 40 MB, lo cual equivale a un blog realmente gigantesco, de varios miles de entradas, y verifiqué además que el importador parece haber resuelto el problema con el conteo de comentarios que padecían anteriores versiones.
Acabado el proceso, Felipe y yo intercambiamos unas cuantas efusiones –nada une más que las zozobras compartidas, aunque sean a distancia-, y celebramos, cada uno a nuestro modo, el éxito de la empresa: él con un artículo sobre la nueva etapa de Darle a la lengua, y yo yendo al cine, para ver una película –Transformers. La venganza de los caídos-, cuyos innumerables desatinos no pueden ser compensados ni siquiera por la descomunal belleza de Megan Fox. A veces pienso que debo ser propenso a ciertos desequilibrios psicológicos –¿el síndrome de estrés postraumático?-, que me hacen perder la cabeza tras episodios de angustia.
Bien está lo que bien acaba, cabría decir en esta ocasión. Sin embargo, ahora que puedo ver el caso con la debida perspectiva, toca hacer autoanálisis y examen de conciencia, y confesar que es la segunda vez que cometo el mismo error, porque ya en mayo de 2008 mi propio blog sufrió un enloquecimiento de la codificación de la base de datos (véanse las entradas tituladas Vaya susto y Se pasó el susto), exactamente en las mismas circunstancias que han afectado al de mi colega bloguero. Es cierto que las versiones de WordPress implicadas en ambos episodios no eran las mismas, pero pude haber puesto más atención a mi propio testimonio y haberme dado cuenta de que el cotejamiento de sus tablas era problemático. El procedimiento para actualizar hubiera sido el mismo que el que tuve que afrontar en segunda instancia, pero al menos nos habríamos ahorrado las tribulaciones y los sofocones.
Así que ya lo saben, sufridos blogueros y blogueras que utilizan WordPress: antes de actualizar su blog, sobre todo si parten de una versión de cierta antigüedad, verifiquen el juego de caracteres y el cotejamiento de las tablas de su base de datos, un par de veces mejor que una. Si ésta es distinta de utf8, se hallan ustedes ante una situación que requiere todo el cuidado del mundo. Aunque sé que existen otras soluciones, son técnicamente complejas, y por tanto mi recomendación en esta circunstancia es que hagan una instalación limpia y migren el contenido del viejo blog mediante los scripts de exportación e importación que el propio WordPress proporciona. Es un procedimiento que exige atención y en la mayor parte de los casos un trabajo fino de reajuste de los plugins, los widgets y los temas, pero también una inmejorable oportunidad para limpiar la morralla acumulada en el blog.
Adenda del 28 de junio de 2009
El comentario de Mario Núñez que figura bajo estas líneas, y el artículo que el propio Mario publicó ayer, me han animado a escribir estas líneas, que no son tanto una rectificación como una propuesta alternativa. Por las referencias en la Red que he podido encontrar, el truco funciona, aunque tiene algunos inconvenientes, como el hecho de que al mantener el wp-config.php antiguo se pierden (o se pueden perder) las innovaciones de seguridad que las últimas versiones de WordPress han introducido, a través de diferentes variables del archivo de configuración. Con todo, sigo defendiendo las virtudes de la actualización mediante la reinstalación y la importación del contenido antiguo, aunque, como ya he advertido, es un procedimiento laborioso, que exige un control minucioso del estado del blog.
Por cierto: gracias al comentario y los avisos privados de Mario me he dado cuenta también de que la función de entradas relacionadas que añadí ayer al fichero index.php de la plantilla de mi blog había descabalado el sistema de comentarios. Pido disculpas por ello, aunque creo que el único afectado ha sido nuestro maestro bloguero boricua, a quien tanto debemos todos los practicantes de WordPress.
Segunda adenda del 28 de junio de 2009
Creo que ya he resuelto el problema con los comentarios que aparecían fuera de lugar, a consecuencia del código de entradas relacionadas. Acabo de incorporar al fichero index.php de mi plantilla el código publicado por MindBlog, en WordPress: Related posts by tags. A tenor de las pruebas que he realizado, funciona bien, pero si alguien quiere confirmarlo con el correspondiente comentario, me haría un gran favor.
Tengo una sugerencia para esos casos que me ha resuelto el problema: Usar el archivo wp-config.php del blog original. Con eso desaparece el problema con los caracteres.
Tienes toda la razón, Mario. De hecho, me di cuenta de esta alternativa mientras redactaba la presente entrada, es decir, demasiado tarde para ponerla en práctica. En realidad, no hace falta utilizar el wp-config.php viejo, sino que basta con poner en blanco o deshabilitar las variables DB_CHARSET y DB_COLLATE. Además, volver al wp-config.php viejo tiene algunos inconvenientes, pues se pierden las mejoras de seguridad que las últimas versiones de WordPress incorporan en dicho fichero.
Estimado Eduardo;
Gracias por tu sugerencia. Para la próxima actualización de una versión viejita es la que utilizaré.