Problema
Anche dopo aver aggiornato con successo il codice in crx/de, il nuovo codice Sightly implementato non si riflette nel sito AEM. Il sito visualizza ancora il vecchio codice Sightly su alcune istanze di pubblicazione.
Ambiente
AEM 6.1, 6.2, 6.3
Causa
Poiché il codice viene implementato correttamente a tutte le istanze di pubblicazione, il problema è la ricompilazione di codice Sightly su una particolare istanza o istanze.
Ogni volta che il codice viene implementato su un'istanza AEM, il nuovo codice implementato deve forzare la ricompilazione del codice esistente quando viene richiesta la pagina associata. C'è un problema noto con Sightly[1], che non rileva correttamente il nuovo codice aggiunto e quindi non forza una ricompilazione.
[1] https://issues.apache.org/jira/browse/SLING-6612
Risoluzione
La soluzione completa a questo problema è disponibile nella versione AEM con lo Scripting HTL Engine versione 1.0.34. Nel frattempo, incorpora le seguenti fasi nel processo di implementazione per garantire un'esperienza uniforme su tutte le istanze AEM.
- Inserisci lo script [2] nella directory di installazione di AEM e concedi i privilegi utente di AEM per eseguirlo.
- Vai alla posizione, dove lo script è sul server AEM ed eseguilo con il seguente comando. Nell'esempio seguente, lo script di esempio è posizionato nella directory di installazione di AEM.
./cq-force-recompilation.sh crx-quickstart/ http://localhost:4526 admin:admin
- L'output assomiglia a quanto segue:
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...
Elimina le librerie precedentemente compilate e costringe le librerie aggiornate a compilare quando viene richiesta la pagina associata.
[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."