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