Desde hace unos meses está disponible la versión 3.0 de WordPress, y un poco por pereza (ya ni se cuando fue mi último post) y un poco por ver como se iban estabilizando las versiones hemos esperado a subir la versión de 2.9 a 3.0. Conviene estar al día tanto de la versión principal como la de las extensiones y ya la hemos actualizado hace unas semanas. De momento parece que no hemos roto nada.

El proceso de actualización está muy bien resuelto en la consola de administración de WordPress, pero nos hemos topado con un problema con el proveedor de esta página (1&1). El caso es que el proceso de actualización requiere la descarga de un fichero que supera los límites de memoria adjudicados en el php.ini de nuestra configuración como clientes de 1&1. Salvo error u omisión, este parámetro (que en algunos post se apunta como alterarlo para subir la memoria y superar el problema) no está bajo el control de los suscriptores de 1&1 y después de diversas pruebas lo hemos desechado como solución.

Sólo quedaba el hacerlo de manera manual o … intentar encontrar el punto en el código php en el que se producía la descarga y puentearlo. Si además encontrabamos en que sitio dejaba el proceso el fichero zip a descargar con la edición española podríamos dejarlo allí previamente para que el proceso siguiera su curso.

Después de un rato siguiendo la traza con varios ‘echo’ sobre los php apareció esta zona del código, y pudimos instalar la actualización sin problemas. Para realizarlo basta con 10 minutos para cubrir los siguientes pasos:

  1. Tal y como se recomienda en el asistente de WordPress conviene hacer una copia de seguridad de la base de datos y de la estructura de directorios. En nuestro caso mediante la herramienta de copia de la extensión WP-DBManager y la consola de administración de 1&1 efectuamos copias de seguridad habitualmente.
  2. Descomprimir el fichero de actualización (en estos momentos la 3.0.1) sobre el directorio ‘wp-content/upgrade’. Esto normalmente se hace a través de la herramienta de administración que facilite el proveedor de espacio web.
  3. Comentar un código e incluir una línea en el fichero ‘wp-admin/includes/class-wp-upgrader.php’, está sobre la línea 776 (aunque dependiendo de la versión de origen de php el nº de línea puede variar). Para editar esto bajamos el fichero a local mediante la conexión ftp y lo volvemos a subir modificado:
    // Este bloque de código descarga y descomprime, es necesario comentarlo o borrarlo para anularlo
    /*
    $download = $this->download_package( $current->package );
    if ( is_wp_error($download) )
    return $download;
    $working_dir = $this->unpack_package( $download );
    if ( is_wp_error($working_dir) )
    return $working_dir;
    */
    // Este código genera la variable del directorio de salida como si hubiese sido descargado y descomprimido automáticamente
    $working_dir = $wp_filesystem->wp_content_dir() . 'upgrade';
  4. Seguir el proceso de instalación desde el asistente en la consola de administración.

Como comprobación de que todo ha ido bien podemos por ejemplo echar un vistazo al fichero editado, el propio proceso de actualización lo reemplaza por una nueva versión del mismo.

Suerte con el cambio.

Actualización 08/01/2011: Con el cambio a la versión 3.0.4 ha surgido el mismo problema y ha sido necesario adaptar este proceso dado que la descarga y descompresión parece que ahora se hacen en directorios separados. De paso hemos simplificado los cambios a realizar en el código y dejamos que el script sea el que descomprima el fichero:

  1. El backup antes nunca viene mal.
  2. Copiar el fichero de actualización (en estos momentos la 3.0.4) sobre el directorio ‘wp-content‘.
  3. Comentar un código y modificar algunas líneas en el fichero ‘wp-admin/includes/class-wp-upgrader.php’, está sobre la línea 878 (aunque dependiendo de la versión de origen de php el nº de línea puede variar). Para editar esto bajamos el fichero a local mediante la conexión ftp y lo volvemos a subir modificado:
    // Se comenta el bloque de código que descarga y es el que da el problema de memoria
    /*
    $download = $this->download_package( $current->package );
    if ( is_wp_error($download) )
    return $download;
    */
    // Se modifica el bloque de descompresión para acceder al fichero previamente subido a mano por ftp
    $working_dir = $this->unpack_package( $wp_dir . 'wp-content/wordpress-3.0.4-es_ES.zip' );
    if ( is_wp_error($working_dir) )
    return $working_dir;
  4. Seguir el proceso de instalación normalmente, al finalizar el script borra el fichero .zip así como todos los generados al descomprimirlo.

Suerte de nuevo con el cambio.

Actualización 13/08/2011: Para la versión 3.2.1 sigue funcionando, pero ojo da más problemas de reserva de memoria en otros módulos después de actualizar (como puede ser la actualización de noticias donde me sale el siguiente error “Fatal error: Out of memory (allocated 30932992) (tried to allocate 19456 bytes) in /homepages/26/d314663804/htdocs/wp/yabocs/wp-includes/class-IXR.php on line 298″). Como no amplien este problema de memoria no veo viable el uso de wordpress en 1&1.

Actualización 15/08/2011: Fin de los problemas. Desde soporte técnico permiten el paso a un nuevo paquete (mismo precio) que tiene más memoria por cada hilo de ejecución. Parece que el cambio ha salido bien.