terça-feira, 19 de abril de 2016

Sessões e lentidão no Magento


Uma das maiores plataformas de lojas online é sem dúvida a Magento, apesar do meu contacto com esta plataforma não ter passado de instalação e configurações iniciais, desta vez foi me pedido para analisar e solucionar um problema nesta plataforma.

Foi reportado uma instabilidade na plataforma, dificuldades de acesso, extrema lentidão em resumo algo que não é compatível com quem pretende usar a 100% da plataforma.

Motivo:
O sistema Magento, guarda as sessões dos utilizadores em ficheiros, sessões essas que neste caso, nunca foram apagadas desde que o sistema ficou online, ficando a pasta com +/- 200,000 ficheiros.

Tentou-se eliminar os ficheiros via FTP, via FileExplorer dentro do Plesk mas devido ao numero elevado de ficheiros tornava qualquer ideia um fiasco.

Ainda surgiu a possibilidade de um acesso por terminal, mas a empresa de alojamento não cedeu acessos em tempo útil.

Tentei ainda usar um ficheiro .php com a função unlink que já resolveu outros casos, mas ao requisitar o ficheiro, o próprio browser entrava em colapso.

Solução:

Ao fim de todas estas tentativas frustradas, surge a solução repartida em duas partes:

  • ficheiro .php para ser invocado pelo browser
  • ficheiro .py para executar a acção de remover dentro do servidor (S.O. Linux)

Nota: Deixo apenas as linhas gerais dos ficheiros iniciais, no fim deixo o download de versões melhoradas.
Nota 2: Não me responsabilizo pelo uso destes ficheiros indevidamente ou sem saber o que está a fazer.

Fazer upload para a pasta de root_site (www, http_docs, ...)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
// mag_session_rm.php simplified
// Retorn path real do servidor
$fp = realpath(dirname(__FILE__))."/var";
// Confirma que o ficheiro python esta na pasta "var"
if(file_exists($fp."/session_rm.py")){
  // Troca para o pasta "var"
  chdir($fp);
  // Executa o shell_exec para iniciar rm_sessions.py
  shell_exec("python session_rm.py");
}

Fazer upload para a pasta root_site/var
1
2
3
4
5
6
7
8
"""
USE THIS SCRIPT CAREFULLY - mag_session_rm.py
"""
#!/usr/bin/python
import os

# Chama as funções de sistema operativo para remover
os.popen("rm -f ./session/*")


O caminho que pretendemos afetar fica em root_site/var/sessions
Fiz ficheiros em locais diferentes, para tentar minimizar tentativas de acessos/adulteração dos ficheiros.

Por fim pelo browser aceder ao url do site ex: www.lojaonline.com/mag_session_rm.php

Aguardar uns segundos/minutos dependendo da quantidade de ficheiros e em pouco tempo a sua loja Magento está de novo em pleno.

[Download] Neste ficheiro vai encontrar os dois ficheiros, mas o de php tem implementado um formulário onde pede uma password que deve ser definida pelo leitor.


1
20
21
22
<?php
// Minimal Security - SHA1 Password 
// Get One in www.sha1-online.com
$safePasswd = "22bf5d4a65ff0792ed773c17fa7178ed1cf76aa6";

Obrigado pela atenção

quarta-feira, 13 de abril de 2016

IDE Atom by GitHub

Qualquer pessoa interessada em começar ou que já tenha alguma experiência em programação, sabe que, a uma determinada altura vai precisar de utilizar um IDE.

Existe uma grande quantidade de ofertas, e até à poucos dias tinha como IDE de trabalho o NetBeans, é um ótimo IDE a última versão consome menos recursos, mas, senti-me obrigado a trocar.

Já passou algum tempo desde que testei as primeiras versões do Atom by GitHub e tenho que admitir, neste momento é o meu preferido.



Tem como vantagem, ser rápido a iniciar, consigo trabalhar do mesmo modo no Windows, OSX e Ubuntu e tem muitos pacotes de plugins de boa qualidade prontos a adicionar, e são esses pacotes que vou partilhar aqui nesta publicação.

Tema (Theme):


Pacotes (Packages) - Aspecto

  • Seti Iconshttps://atom.io/packages/seti-icons - Implementa pequenos icons relacionados com o tipo de ficheiro, tornando rápido a identificação do mesmo sem ler a extensão;
  • Minimap https://atom.io/packages/minimap - Permite uma visualização do código numa barra ao alto, o que torna além de mais rápido saltar no código, acabamos por associa blocos/coloração do código e rápidamente estamos no sitio que precisamos;

Pacote (Package) - Código

Caso tenha packages/themes que não esteja a usar é melhor desinstalar para não tornar o IDE pesado.