Archives de août, 2015

Corriger les arrêts intempestifs de Proftpd

Sur mon serveur dédié qui tourne sous ubuntu 14.04* j’avais depuis longtemps un problème avec le serveur proftpd qui redémarrait de manière intempestive.
Ce qui nécessitait à chaque fois un redémarrage via ssh pour pouvoir à nouveau se connecter.

Après quelques recherches j’ai trouvé que la cause était la rotation des logs.
Celle-ci nécessite l’arrêt et le redémarrage du serveur, et le redémarage ne fonctionnait pas, du coup le service ne fonctionnait plus.

Voici comment faire pour corriger cela :
Editez le fichier : /etc/init.d/proftpd

Remplacer la ligne suivante :

start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE"

Par le contenu suivant :

start-stop-daemon --stop --signal $SIGNAL --retry 1 --quiet --pidfile "$PIDFILE"

 

Une fois cette modification effectuée, le problème ne devrait plus survenir 🙂

* Le problème était également présent sur ubuntu 12.04…

Pas de commentaires

Optimiser le développement de modules Prestashop : Tester fonctionnellement vos modules avec Phpunit et Selenium

Cet article fait partie de la série : Optimiser le développement de modules Prestashop

  1. Mise en place de l’environnement de développement
  2. Industrialiser l’installation de Prestashop et des modules
  3. Tester fonctionnellement vos modules avec Phpunit et Selenium
  4. Éviter les régressions avec l’intégration continue

3ème étape de notre série sur l’optimisation du développement de module prestashop.

Après la configuration de l’environnement et l’industrialisation des installations qui ont permis de mettre en place la structure de développement, il est temps de passer aux tests fonctionnels de nos modules.
Ceci nous permettra de vérifier que le comportement utilisateur est bien celui attendu.

Configuration de l’environnement pour exécuter les tests

Pour cela nous allons déjà installer les programmes suivants sur le serveur

  • Xvfb : permettra de lancer une application graphique sans serveur X
  • Firefox : navigateur
  • Java : JDk

Pour installer ces éléments saisissez les commandes suivantes

sudo apt-get install xvfb
sudo apt-get install firefox
sudo apt-get install default-jdk

Nous allons ensuite installer également phpunit et selenium, cependant ces éléments peuvent être installé de manière globale ou via composer

Installation globale

PhpUnit

#Téléchargement de phpunit
wget https://phar.phpunit.de/phpunit.phar
#Droits d'éxécution sur le fichier
chmod +x phunit.phar
#Déplacement dans les binaires locaux
sudo mv phpunit.phar /usr/local/bin/phpunit

Pour vérifier son bon fonctionnement saisissez la commande suivante :

phpunit --version

Selenium :

wget http://selenium-release.storage.googleapis.com/2.47/selenium-server-standalone-2.47.0.jar
#droits d'exécution
chmod +x selenium-server-standalone-2.47.0.jar
#déplacement dans les binaires
mv selenium-server-standalone-2.47.0.jar /usr/local/bin/selenium-server-standalone.jar

Via composer :

Créer un fichier composer.json dans le dossier « prestashop » ( dossier parent de « scripts », »global_modules », et toutes les installations prestashop )
Avec le contenu suivant :

{
"name": "hhennes/prestashoptest",
"description": "Functionnal test for prestashop modules",
"authors": [
{
"name": "Herve",
"email": "[email protected]"
}
],
"require": {
"phpunit/phpunit": "^4.8",
"phpunit/phpunit-selenium": "^1.4",
"se/selenium-server-standalone": "^2.47"
}
}

Puis saisissez la commande :

composer install

Les éléments nécessaires sont à présent installé dans le dossier « vendor »;

Création des fichiers de tests

Créer un fichier phpunit.xml à la racine du module avec le contenu suivant

<?xml version="1.0"?>
<phpunit convertErrorsToExceptions="true">
 <testsuite name='SampleModuleTests'>
      <directory suffix='.php'>./tests/</directory>
 </testsuite>
 <logging>
     <log type="junit" target="./tests/results/results.xml" logIncompleteSkipped="true"/>
     <log type="tap" target="./tests/results/results.tap" logIncompleteSkipped="true"/>
 </logging>
</phpunit>

Nous allons à présent écrire notre tests fonctionnel pour le module « samplemodule » de notre série que nous allons placer dans le fichier SampleModuleTest.php un dossier « tests »
Ce test va s’assurer que le texte « It works » est bien présent sur le controller  front office de notre module.…

Pas de commentaires

Mantis Bugtracker : Plugin Changement automatique de statuts

Voici un nouveau plugin pour mantis Bugtracker.

Celui-ci permet de changer automatiquement le statut d’un bug vers un autre statut après une durée de x jours.
Mais également d’envoyer une note d’avertissement x jours avant le changement de statut.

Ce plugin est relativement pratique pour relancer ou clore automatiquement des bugs en attente de validation client par exemple.

Pour commencer il faut définir quel utilisateur va effectuer ce changement de statut :
changestatus

 

Vous pouvez-ensuite saisir les changements de statuts souhaités via un formulaire dédié.
Ceux-ci peuvent être spécifiques à des projets particuliers.

add-status-change

Une fois vos changements insérés dans la configuration du module, il ne vous reste plus qu’a mettre en place une tâche cron sur le fichier

mantisdir/plugins/AutoChangeStatus/pages/cron.php

Pour récupérer la dernière version du module et suivre ces modifications ça se passe par ici :
https://github.com/nenes25/mantisbt_autochangestatus

Vous pouvez télécharger le plugin : MantisAutoChangeStatus

7 commentaires

Optimiser le développement de modules Prestashop : Industrialiser l’installation de Prestashop et des modules

Cet article fait partie de la série : Optimiser le développement de modules Prestashop

  1. Mise en place de l’environnement de développement
  2. Industrialiser l’installation de Prestashop et des modules
  3. Tester fonctionnellement vos modules avec Phpunit et Selenium
  4. Éviter les régressions avec l’intégration continue

Cet article est la 2ème étape de notre série sur l’optimisation de modules Prestashop.
Merci de prendre connaissance de la partie 1 : mise en place de l’environnement de développement afin de pouvoir suivre cet article.

Notre environnement de développement est à présent en place, nous allons donc passer à l’industrialisation de l’installation de Prestashop, mais également de ces modules.
L’idée de cette étape est d’avoir des outils pour mettre en place rapidement et automatiquement les versions souhaitées de Prestashop sur notre serveur.

Proposition du structure des fichiers sur le serveur.

Le dossier racine de notre installation est /var/www/public/, dans ce dossier nous allons créer un dossier « prestashop » qui va contenir l’ensemble de nos installations Prestashop.

Celles-ci seront installées dans des sous-dossiers « prestashop_1.x.x.x/ »
Les numéros de versions dans l’url permettront d’accéder facilement à la version souhaitée :  http://192.168.33.10/prestashop/prestashop_1-6-1-1/ par exemple.…

4 commentaires

Optimiser développement de modules Prestashop : Mise en place de l’environnement de développement

Cet article fait partie de la série : Optimiser le développement de modules Prestashop
  1. Mise en place de l’environnement de développement
  2. Industrialiser l’installation de Prestashop et des modules
  3. Tester fonctionnellement vos modules avec Phpunit et Selenium
  4. Éviter les régressions avec l’intégration continue

Pour commencer notre série sur l’optimisation du développement des modules Prestashop, nous allons commencer par la mise en place de l’environnement de développement.

Si vous en avez la possibilité, travailler directement sous Linux apporte directement l’ensemble des fonctions qui sont disponibles sur votre serveur, sur votre poste de travail.
Si c’est déjà votre cas vous pouvez passer directement à la partie sur le versionning de vos sources.

Installer une machine virtuelle en local.

Si vous travaillez avec un environnement Windows vous avez sans doute déjà travaillé avec Wampserver.
Mais pour ma part je trouve que cette solution est à présent trop limitée, d’autant plus que l’installation des outils les plus pratiques actuellement ( git / composer … ) est plus compliquée sous l’ environnement windows.…

Pas de commentaires

Nouvelle série : optimiser le développement de modules Prestashop

Si comme moi vous développez des modules Prestashop vous avez sans doute déjà rencontrés pas mal de difficultés et perdu du temps sur des événements redondants.

Au cours des prochaines semaines, je vais donc partager avec vous les astuces utilisées quotidiennement dans mes développements.

Cette série d’articles devrait donc vous permettre d’optimiser le développement de modules Prestashop.
N’hésitez pas à partager vos astuces pour optimiser encore plus ces articles ! 🙂

Voici les différentes étapes qui seront détaillées :

Étape 1 : mise en place de l’environnement de développement

  • Oubliez wamp, utilisez vagrant
  • Versionnez vos sources ( github / git local / svn )
  • Mettez en place des outils de validation et de corrections des normes

Étape 2 : Industrialiser l’installation de Prestashop et des modules

  • Proposition du structure sur le serveur
  • Installer Prestashop via la ligne de commande
  • Gérer ses modules avec le module eiinstallmodulecli

Étape 3 : Tester fonctionnellement vos modules avec Phpunit et Selenium

  • Configuration de l’environnement pour exécuter les tests
  • Mise en place d’un framework de tests fonctionnels
  • Premiers tests fonctionnels

Étape 4 : Éviter les régressions avec l’intégration continue

  • Mise en place d’une plateforme d’intégration continue avec jenkins

 

Dans le cadre de cette série, les exemples seront liés à la solution Prestashop, mais ces bonnes pratiques peuvent être mises en œuvre sur de nombreux projets 🙂…

Pas de commentaires

Prestashop : Afficher la référence fournisseur dans la liste admin des produits

Si vous souhaitez rajouter la référence fournisseur dans la liste des produits dans l’administration afin de pouvoir filtrer les produits via ce paramètre voici comment faire :

( Attention en raison de la méthode de stockage, ceci fonctionne uniquement pour les produits qui n’ont pas de déclinaisons )

Créer un override de la classe AdminProductControllers dans l’emplacement override/controllers/admin/ et insérer le code suivant :

<?php
class AdminProductsController extends AdminProductsControllerCore
{
    
    public function __construct()
    {
        
        parent::__construct();
        
        // On joint la table ps_supplier ou la référence est stockée
        $this->_join .= ' LEFT JOIN '._DB_PREFIX_.'product_supplier ps ON ( a.id_product = ps.id_product AND ps.id_product_attribute = 0 )';
        
        //Ajout du champs dans la liste des champs affichés dans l'amdin
        $this->fields_list['product_supplier_reference'] = array(
            'title' => $this->l('Supplier Reference'),
            'align' => 'left',
            'filter_key' => 'ps!product_supplier_reference',
            'width' => 80
        );
    }
}

La nouvelle colonne « Supplier reference » apparait bien ensuite dans le listing des produits, et il est possible de trier via ce paramètre 🙂
Supplier renference admin list

 

Edit 2015-08-20 :
Si vous souhaitez également pouvoir rechercher les produits dans l’administration via ces références, voici comment procéder :

Pour commencer il faut surcharger la fonction searchByName de la classe Product , afin de chercher dans le champ supplier_reference

 

<?php 
class Product extends ProductCore {
 
 
    /**
    * Admin panel product search
    *
    * @param integer $id_lang Language id
    * @param string $query Search query
    * @return array Matching products
    */
    public static function searchByName($id_lang, $query, Context $context = null)
    {
        if (!
3 commentaires

Monitorer sites mutualisés avec Nagios

Si vous gérez plusieurs hébergements mutualisé et que vous souhaitez les monitorer facilement depuis votre serveur dédié, voici comment procéder avec Nagios.
Pour l’installation qui est assez complexe je vous laisse consulter l’article suivant qui est très bien réalisé :

http://www.unixmen.com/how-to-install-nagios-4-1-in-ubuntu-15-04/

Une fois l’installation effectuée nous allons créer un dossier « websites » dans « /usr/local/nagios/etc/ » dans lequel nous placerons toutes nos nouvelles configurations.
Pour charger automatiquement ces configurations il faut rajouter la ligne suivante dans le fichier :
/usr/local/nagios/etc/nagios.cfg

cfg_dir=/usr/local/nagios/etc/websites

Voici ensuite un fichier template qui vous servira de configuration pour vos sites

################ 
# Groupe des hotes : ( UN groupe par client )
###############
define hostgroup{
        hostgroup_name  Google
        alias           Google
}
 
################ 
# Définitions des hotes à tester
###############
 
#Modele de verification
define host{
 name google-host ;Changer le nom du host
 use generic-host
 hostgroups  Google ;Prendre le nom du hostgroup defini plus haut
 check_command check_http!
Pas de commentaires


Compte Github