Si vous en avez marre de redémarrez Zope2 à chaque modification du code source (python ou zcml) cette astuce est pour vous: utiliser plone.reload si vous utilisez Plone 3 ou alors RefreshNG si vous utilisez Plone 2.5.

Plone 3 & plone.reload

plone.reload sur pypi

Installer plone.reload 0.9

Editer votre buildout.cfg pour y intégrer plone.reload:

[project]
...
eggs=
    ...
    plone.reload

zcml=
    ...
    plone.reload

[versions]
...
plone.reload = 0.9

Puis relancer votre buildout:

$ ./bin/buildout -c buildout.cfg

Utiliser plone.reload

Si votre Zope écoute sur le port 8080 de localhost, rendez-vous à l’adresse suivante: http://localhost:8080/@@reload

L’interface vous propose deux actions:

  • Reload code: Tous les modules modifiés depuis leur dernier chargement sont rechargés.
  • Reload code and ZCML: Recharge également tous les modules modifiés mais aussi toutes les directives de configuration ZCML.

Attention: plone.reload reste expérimental et possède certaines limites, notament pour les méthodes décorées qui ne sont pas rechargées correctement.


Plone 2.5 & RefreshNG

RefreshNG sur launchpad.net

Pourquoi ne pas utiliser plone.reload ?

Et bien tout simplement car je n’ai pas réussi ;) et que plone.reload s’est très fortement inspiré du produit Zope RefreshNG.

Installer RefreshNG 0.1

Editer votre buildout.cfg pour y intégrer RefreshNG:

[project]
...
urls=
    ...
    http://launchpad.net/refreshng/0.1/0.1/+download/RefreshNG-0.1.tar.gz

Puis relancer votre buildout:

$ ./bin/buildout -c buildout.cfg

Utiliser RefreshNG

Pour activer la fonction “refresh” pour un de vos produits en cours de développement (ex: MyProduct), il suffit de rajouter dans le produit un fichier vide nommé “refresh.txt”.

Rendez-vous alors via la ZMI sur la page “Control_Panel > Products > MyProduct” puis cliquez sur l’onglet “refresh”.

L’interfarce vous propose alors de recharger le produit (Refresh this product) et même de marquer le produit comme “auto-recharcheable” (auto refresh mode).

Attention: Tous les produits ne sont pas compatibles avec cette fonctionnalité, cf. le README du produit RefreshNG pour en savoir plus.