Problema – Tienda Prestashop con demasiadas peticiones SQL

Pues hoy toca un problema que me pasó justo después de Navidad, y es que por consumo de CPU la gente de hostgator me deshabilitó el acceso a una tienda que creamos. Imagináos que el día después de Navidad os dicen….
“Apologize, but I was forced to suspend the directory /home/XXXXXX/public_html/ as multiple scripts inside were causing high loading issues on the server. Due to it affecting all of the other accounts on the system, we had to take immediate action for the health of the server. ”

Las causas que pude ver… demasiadas entradas de buscadores en los últimos días, no de gente sino de spiders. Extrañamente esto provocaba que hubiera cientos de miles de peticiones sql.

¿Cual fue la primera solución que tomamos?

  • Administración->Estadísticas->Configuración: Poner que las estadísticas se limpiaran automáticamente cada semana (ocupaban bastantes registros en la BBDD)
  • Instalar un robots.txt en el directorio raíz capando aquellos robots que creíamos que provocaban esto.
  • Denegar el acceso a las Ips de estos server temiendo que se tratara de un ataque DDos.

Lo extraño es que pese a que se habían reducido las entradas se seguían realizando cientos de peticiones SQL.

La solución entonces pasó por comprobar qué era lo que pasaba en las tripas de prestashop, y es que corre como todos sabréis sobre smarty. Pues en la carpeta config/ hay un archivo llamado smarty.config.inc.php, y en él, hay un parámetro ($smarty->force_compile = false; )

Nosotros lo teníamos a true y cuando se pasa a producción es necesario ponerlo a false.

Vamos, explicándolo en palabras llanas: si hay 100 visitas al día en la web no pasaba nada pese a que compilaba todo de nuevo, pero en el momento en que lanzabas 1000 visitas o más a la hora entonces se tostaba porque las 1000 veces tenía que compilarlo todo. De esta forma teníamos millones de consultas en 15 días.

Espero que esto haya ahorrado tiempo a la gente que lo vea :S

Nota: Esta tienda estaba hecha con la versión 1.3.7 de prestashop, en prestashop 1.4 hay una opción en preferences->performance que permite seleccionar si queremos forzar o no la compilación, con lo cual es mucho más sencillo de solucionar. Os dejo una imagen sacada de esta web.

 

Como introducir código javascript dentro de vista tpl

El problema que me ha retrasado hoy ha sido exactamente el que podéis leer:

Estaba intentando hacer una validación en un formulario (si estaba marcada la check enviaba un formulario, sino estaba marcada sacaba un mensaje de alerta). Cuando yo insertaba mi pequeño código por alguna oscura razón no funcionaba, hasta que introduje el código entre las etiquetas {literal} {/literal}

De forma que quedó de la siguiente forma:

{literal}
	
{/literal}

Prestashop – Cómo utilizar una imagen distinta al logotipo en pdfs, mails y rss

Hoy me encontré ante el problema de que un cliente quería un logotipo en sus pdfs diferente al de su imagen de la tienda (por tema de colores). Buscando a lo largo de internet me encontré con esta solución que os traduzco ahora mismito.

  1. Creáis la imagen que queréis introducir en los documentos con el nombre que queráis (cuidado con sobreescribir el logotipo de la tienda propiamente dicho).
  2. La subís en el directorio img de la tienda.
  3. Accedéis a los archivos \classes\PDF.php, classes\mail.php, \modules\referralprogram\preview-email.php y \modules\feeder\rss.php de la tienda y buscáis las coincidencias de la palabra logo y la sustituís por el nombre de la nueva imagen modificada.

Y ya estaría todo!!!! Ya tenéis una nueva imagen en vuestros documentos en pdf, mails y rss!!!

Algo muy importante es que en el momento que os actualicéis a nuevas versiones estos cambios desaparecerán, con lo cual tendréis que tomar nota de donde habéis modificado todo