Problema

Incluso después de actualizar el código correctamente en crx/de, el nuevo código visual desplegado no se refleja en el sitio de AEM. El sitio todavía muestra el código visual más antiguo en algunas instancias de publicación.

Entorno

AEM 6.1, 6.2, 6.3

Causa

Dado que el código se despliega correctamente en todas las instancias de publicación, el problema está en la recompilación de código en una instancia o instancias en particular.

Cada vez que se realiza una implementación de código en una instancia AEM, el código recién implementado debe forzar una recompilación del código existente cuando se solicita la página asociada. Hay un problema conocido con Sightly[1], que no detecta correctamente el código recién agregado y, por lo tanto, no fuerza una recompilación.

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

Resolución

La solución completa para este problema está disponible en la versión AEM con el motor HTL de secuencias de comandos versión 1.0.34. Mientras tanto, incorpore los siguientes pasos en el proceso de despliegue para asegurar una experiencia uniforme en todas las instancias de AEM.

  • Coloque el script [2] en el directorio de instalación de AEM y conceda al usuario de AEM privilegios para ejecutarlo.
  • Vaya a la ubicación donde se encuentra el script en el servidor AEM y ejecútelo usando el siguiente comando. En el siguiente ejemplo, el script de ejemplo se coloca en el directorio de instalación de AEM.
./cq-force-recompilation.sh crx-quickstart/ http://localhost:4526 admin:admin
  • La salida tiene el siguiente aspecto:
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...

Borra las bibliotecas compiladas anteriormente y obliga a las bibliotecas actualizadas a compilar cuando se solicita la página asociada.

[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."

Esta obra está autorizada con arreglo a la licencia de Reconocimiento-NoComercial-CompartirIgual 3.0 Unported de Creative Commons.  Los términos de Creative Commons no cubren las publicaciones en Twitter™ y Facebook.

Avisos legales   |   Política de privacidad en línea