Hacer una migración Prestashop de un entorno local a un entorno real de producción (online) es algo relativamente sencillo pero en ningún tutorial te explican qué hacer si todo falla, algo que suele suceder con relativa frecuencia.

Tras leer muchos tutoriales sobre este proceso decidí escribir este artículo que se centra en cómo detectar, monitorizar y resolver los problemas más comunes que suelen aparecer una vez terminemos el proceso de migración.

Este tutorial ha sido creado sobre una tienda Prestashop 1.5.6.2 instalada en un entorno local, en Mac usando MAMP Server y un servidor de producción de calidad pero bastante restrictivo como suele ofrecer la empresa de alojamiento Hostspain.

Este proceso que voy a explicar es válido para una migración en los dos sentidos: local->online  y  online->local

Migración de Prestashop 1.5.6.2 desde localhost a un servidor online

Hay que comenzar por el principio y para ello vamos a explicar el paso a paso que debemos seguir para realizar la migración. El escenario es el siguiente:

  • Servidor local: Nuestra tienda en desarrollo está instalada en la ruta /localhost/tienda, donde localhost sería el dominio local y tienda un subdirectorio.
  • Servidor online: Nuestra tienda online estará en www.mitienda.com

Comenzamos con la migración:

  1. Accedemos al back office de nuestra tienda local, vamos a Preferencias, Mantenimiento y ponemos la tienda en modo mantenimiento, seleccionando la opción No. Guardamos.
  2. Exportamos la base de datos local accediendo a phpMyAdmin. Elegiremos una exportación completa hacia un fichero.
  3. Ahora vamos al servidor online y creamos una base de datos nueva accediendo al panel de control de nuestro alojamiento. Luego importamos la base de datos del punto anterior en nuestro servidor online usando phpMyAdmin.
  4. Conectamos por FTP a nuestro servidor online con un cliente FTP como pueda ser FileZilla y copiamos (upload) todos los archivos y carpetas desde nuestra tienda local hacia el directorio raíz del servidor online.
    [alert type=”warning” close=”true”]OJO! Cuando se copian archivos por FTP en algunas ocasiones puede que no se copien la totalidad de los archivos y carpetas, conviene revisar esto con mucho cuidado. Esto lo aviso porque en una ocasión tuve que hacer el proceso inverso (migrar un Prestashop online a un entorno local) y al descargar los archivos y carpetas comprobé que NO estaban todos, especialmente las imágenes de productos almacenadas en el directorio /img/p. El problema era que FileZilla no detectaba la estructura completa de carpetas/archivos pero PHP sí, lo resolví creando un script PHP que empaquetaba todos los archivos/carpetas de Prestashop en un único fichero que era el que me descargaba. Normalmente desde PHP sí se puede leer la estructura completa de archivos de un directorio correctamente, sin que falte nada.[/alert]
  5. En el servidor online hay que editar el archivo /config/settings.inc.php para asignar las constantes relacionadas con la base de datos:
    define(‘_DB_SERVER_’, ‘** mi servidor de BD, suele ser localhost‘ );
    define(‘_DB_NAME_’, ‘ ** nombre de la BD **‘);
    define(‘_DB_USER_’, ‘** usuario de la BD **’ );
    define(‘_DB_PASSWD_’, ‘ ** contraseña de la BD **’ );
  6. Llegados a este punto nuestra tienda todavía no funciona porque el archivo .htaccess ubicado en la raíz sigue apuntando a las rutas antiguas (localhost/tienda), sin embargo que podremos entrar a la zona de administración.
  7. Entramos al back office del servidor online, vamos a Preferencias, SEO & URLs, buscamos los tres campos relacionados con el dominio, ponemos los siguiente valores y pinchamos Guardar:
    Dominio de la tienda: mitienda.com
    Dominio SSL: mitienda.com
    Directorio raíz: /
  8. Más abajo pinchamos el botón Generar el archivo robots.txt, que se encargará de generar el archivo .htaccess y robots.txt.
  9. Según lo que dice la documentación oficial de Prestashop (en mi caso no hizo falta) hay que dar el siguiente paso: Conectamos por FTP al servidor online y borramos todos los ficheros salvo index.php de los directorios:
    /tools/smarty/cache
    /tools/smarty/compile
    /tools/smarty_v2/cache
    /tools/smarty_v2/compile
  10. Vamos a Preferencias, Mantenimiento y activamos la tienda abandonando el modo mantenimiento.
  11. Llegados a este punto la tienda debería funcionar, intenta acceder a www.mitienda.com a ver qué ocurre. En mi caso no funcionó y si te ocurre lo mismo pasa al siguiente apartado.

Problemas que pueden aparecer una vez finalizada la migración

Los servidores online suelen tener restricciones importantes en todo lo que se refiere a seguridad, privilegios, mostrado de errores, volumen de información. Esto nos deja muchas veces en un habitación oscura en la que hay que encontrar la salida. Los entornos de producción no suelen mostrar los errores que puedan arrojar PHP, Apache o MySQL, lo que hace muy complicado saber qué y dónde está fallando. Algunas empresas de alojamiento configuran sus servidores para guardar los errores PHP/MySQL/Apache en algún archivo .log a los que no siempre podemos acceder.

Volvamos al ejemplo de antes: en mi caso la migración Prestashop no funcionó. ¿Qué podemos hacer si falla la tienda y nos aparece una página en blanco o un mensaje Error interno … que no nos da ningún tipo de información? Vamos a hacer lo siguiente:

  1. Vamos a activar el modo debug o desarrollo en nuestra tienda online. Editamos el archivo /config/defines.inc.php y ponemos el valor true en la constante _PS_MODE_DEV_. Con esto estamos diciendo a Prestashop que muestre todos los errores de PHP, lo que va a ser decisivo para detectar el origen del problema. Debemos recordar poner este valor en false una vez hayamos terminado todo y la tienda esté funcionando!
  2. Volvemos a probar la tienda y si sigue apareciendo la página en blanco es porque se siguen ocultando los errores PHP a pesar de que se están produciendo, para lo cual daremos los siguientes pasos.
  3. Editamos el archivo .htaccess de la raíz de nuestro servidor online y añadimos las siguientes líneas al principio:
    php_flag log_errors on
    php_value error_log /home/mitienda/public_html/log/errores_php.log
    Esta ruta debe ser la apropiada según nuestro caso, si no sabemos cuál es podemos averiguarla creando un archivo info.php en la raíz de nuestro servidor online que contenga lo siguiente:
    <?php echo getcwd(); ?>
    Luego ejecutamos este script poniendo en el navegador www.mitienda.com/info.php y nos mostrará la ruta física completa de nuestro directorio web raíz. Una vez que sepamos la ruta debemos eliminar este script.
  4. Ahora probamos nuestra tienda y seguirá apareciendo la página en blanco porque sigue fallando, pero si todo ha ido bien se estará generando un error PHP que está siendo almacenado en el archivo /log/errores_php.log del servidor online. Si abrimos ese archivo desde FileZilla veremos qué módulo o qué script está generando el error. Si al acceder al directorio /log/ vemos que no existe el archivo errores_php.log probablemente sea porque la empresa de alojamiento no permite que incluyamos las directivas php_flag y php_value dentro de nuestro archivo .htaccess. En este caso no podemos hacer nada a nivel de configuración y deberemos hablar con la empresa de alojamiento para decirles que activen los log y los coloquen en una ruta a la que podamos acceder para consultarlos.
  5. Finalmente deberías haber conseguido, de una u otra forma, consultar el dichoso .log de PHP para saber qué errores se están produciendo en tu tienda. En mi caso comprobé que el problema era que cuatro módulos no estaban funcionando correctamente, estaban usando las rutas de la tienda local en lugar de las rutas de la tienda online. Esto lo solucioné muy fácilmente desactivando esos cuatro módulos y volviéndolos a activar. De esa forma se reconfiguraron, ya sabes, esto es como Windows, si algo falla …. reinicia!

Algunos posibles problemas…

  • En una de las ocasiones que he puesto en práctica este método se producía un fallo por el sistema de caché. En el servidor de origen estaba usando XCache y el servidor de destino no lo soportaba. Para solucionarlo edité el archivo /config/settings.inc.php y desactivé el caché poniendo la constante _PS_CACHE_ENABLED_ con un valor de ‘0

 

Cómo trasladar o migrar una tienda Prestashop de localhost a un servidor online
Valorar este contenido

Uso de cookies

Esta página web utiliza cookies de terceros, cuya finalidad es mejorar nuestros servicios mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Si cambia de opinión puede cambiar la configuración sobre el uso de las mismas, y obtener más información sobre éstas aquí.

ACEPTAR
Aviso de cookies