Problème

Même après la mise à jour du code avec succès dans crx/de, le code Sightly récemment déployé ne se reflète pas le site AEM. Le site affiche toujours le code Sightly antérieur sur certaines instances de publication.

Environnement

AEM 6.1, 6.2, 6.3

Cause

Depuis que le code est déployé correctement dans toutes les instances de publication, le problème se présente avec la recompilation du code Sightly sur une ou plusieurs occurrences.

Chaque fois qu'un déploiement de code a lieu dans une instance AEM, le code récemment déployé doit forcer la recompilation d’un code existant lorsque la page associée est demandée. Il existe un problème connu avec Sightly [1], qui ne détecte pas correctement le code nouvellement ajouté et qui ne force alors pas une recompilation.

[1] https://issues.apache.org/jira/browse/SLING-6612

Résolution

La solution complète pour ce problème est disponible dans la publication AEM qui comprend la version Scripting HTL Engine 1.0.34. Dans le même temps, incluez les étapes suivantes au processus de déploiement pour garantir une expérience uniforme sur toutes les instances AEM.

  • Placez le script [2] dans le répertoire d’installation AEM et accordez des privilèges à l’utilisateur AEM pour son exécution.
  • Accédez à l’emplacement où le script est placé sur le serveur AEM et exécutez-le à l’aide de la commande suivante. Dans l’exemple suivant, le script d’exemple est placé dans le répertoire d’installation d‘AEM.
./cq-force-recompilation.sh crx-quickstart/ http://localhost:4526 admin:admin
  • La sortie ressemble à ce qui suit :
stopping the org.apache.sling.commons.fsclassloader bundle...​
deleting file  sytem  classes cache: /Users/ anearora /Desktop/AEM/6.2/TestServer/ crx -quickstart/launchpad/ felix /bundle305/data/classes ...
deleting /var/classes in the JCR...
starting the org.apache.sling.commons.fsclassloader bundle...

Elle efface les bibliothèques précédemment compilées et force les bibliothèques mises à jour à compiler lorsque la page associée est demandée.

[2] force-recompilation.sh

#!/bin/bash

if [[ $# -ne 3 || $1 == "-h" ]]; then
    echo "Usage: force-recompilation.sh <crx-quickstart-dir> <http://server:port> <user:password>"
    echo
    echo "Example arguments: crx-quickstart/ http://localhost:4502 admin:admin"
    echo
    echo "This will force a recompilation of all Sling scripts (jsps, java, sightly etc.)."
    exit
fi

dir="$1"
host="$2"
user="$3"

if [ ! -d "$dir/../crx-quickstart" ]; then
    echo "No crx-quickstart directory found."
    exit
fi

echo "stopping the org.apache.sling.commons.fsclassloader bundle..."
bundle="org.apache.sling.commons.fsclassloader"
curl -f -s -S -u $user -F action=stop  $host/system/console/bundles/$bundle > /dev/null
exitCode=$?
if [ $exitCode -ne 0 ]; then
    echo
    if [ $exitCode -eq 22 ]; then
        echo "Invalid admin password."
    fi
    echo "aborted.";
    exit
fi

cd "$dir"

classesDir=`find launchpad/felix -path "*/bundle*/data/classes" -type d`
if [ -d "$classesDir" ]; then
    echo "deleting file sytem classes cache: `pwd`/$classesDir ..."
    rm -rf "$classesDir"
else
    echo "file system classes cache empty or already cleared"
fi

echo "deleting /var/classes in the JCR..."
curl -f -s -S -u $user -X DELETE $host/var/classes > /dev/null

echo "starting the org.apache.sling.commons.fsclassloader bundle..."
curl -f -s -S -u $user -F action=start $host/system/console/bundles/$bundle > /dev/null
if [ $? -ne 0 ]; then
    echo
    echo "aborted, bundle was likely not restarted.";
    exit
fi

echo "done."

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne