Inspeccionar elementos.

Depuración de errores en Moodle

Moodle es una plataforma de gestión de aprendizaje de código abierto. Esta plataforma recibe constantes actualizaciones por parte de la comunidad de desarrolladores, las cuales consisten en solución de errores, mejora de funcionalidades existentes y creación de nuevas funcionalidades.

Reportes de errores de Moodle

En la siguiente página es posible encontrar los reportes de error de las diferentes versiones de Moodle, algunos problemas reportados ya están resueltos y es posible aplicar los cambios a la versión existente utilizando los enlaces a Github con los cambios realizados.

https://tracker.moodle.org/

¿Cómo identificar errores en Moodle?

Para identificar un error es necesario tener la información del problema, esto se realiza con la siguiente información:

  1. Información Javascript.
  2. Información de red (descarga de archivos).
  3. Errores php.
  4. Registro de accesos y errores de servidor Apache.

Información Javascript

La información de Javascript se obtiene del inspector de elementos, para acceder al inspector es necesario hacer clic derecho en la página web afectada o en la que se quiere identificar el error, y seleccionar “inspeccionar”.

Inspeccionar elementos.
Inspeccionar elementos del navegador web.

En el inspector de elementos, todos los errores Javascript aparecen en la sección de “console”.

Ver errores de Javascript en la sección de consola.

Información de red (descarga de archivos)

En el inspector de elementos, en la pestaña “network” es posible ver todos los archivos descargados por el navegador web. Esta pestaña ayuda a identificar las respuestas enviadas por el servidor y el tiempo que tarda en descargar cada archivo.

Ver descarga de archivos en la sección de red.

En esta imagen es posible ver que todos los archivos se descargaron con el estado de respuesta 200 Ok.

Estado de descarga de archivos.

La opción “preserve log” permite guardar la información inclusive si se cambia de página. Si se deshabilita, la información se limpiará y aparecerán solo las descargas de la página activa.

Preservar logs al cargar una nueva página.

La opción “disable cache” permite que el navegador web descargue toda la información de nuevo sin utilizar la cache local. Esta opción funciona únicamente cuando se abre el inspector de elementos, al cerrarlo, utilizará la cache de forma normal, para mejorar la experiencia del usuario.

Deshabilitar cache para cargar todos los documentos.

Al hacer clic en cada archivo descargado, se puede acceder a información más detallada de la respuesta del servidor. Esta información incluye, información de headers, respuesta en formato de texto, que acciones iniciaron la solicitud, tiempos e información de las cookies.

Ver detalle de la respuesta del servidor.

Errores PHP

En Moodle es posible mostrar todos los mensajes de error, esto se configura en la ruta:

Administración del sitio > desarrollo > depuración (debugging)

Las opciones que se deben habilitar son las siguientes:

Opciones de depuración en Moodle.

Una vez habilitado, es posible ir a la página que presenta inconvenientes y ver los errores que imprime Moodle. Si es una función Javascript Ajax la que está fallando, es posible utilizar el inspector de elementos, en la pestaña “network” se puede identificar la respuesta enviada por el servidor, tendrá los errores Php.

Si no es posible iniciar sesión para habilitar esta opción, se puede configurar de forma manual en el archivo de configuración de Moodle (config.php), agregando el siguiente código:

@error_reporting(E_ALL | E_STRICT); 
@ini_set('display_errors', '1'); 
$CFG->debug = (E_ALL | E_STRICT); 
$CFG->debugdisplay = 1;

Si aun así no es posible ver los errores, es necesario editar el archivo php de Moodle en donde se presenta el problema, por ejemplo, /var/www/html/2024/login/index.php, y agregar el siguiente código:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Nota: estas opciones es necesario deshabilitarlas cuando los usuarios utilizan la plataforma, pueden causar confusión. En producción, es necesario habilitarlas para obtener los errores, una vez esto, se debe deshabilitar.

Registro de accesos y errores de servidor Apache

Una vez identificada la página que presenta problemas en Moodle, es posible identificar los errores propios del servidor web. Para facilitar esto, es aconsejable agregar un parámetro en la URL par poder identificar las pruebas que estamos realizando. Por ejemplo, si la URL que presenta el error es la página de inicio de sesión:

https://mimoodle.com/2024/login/index.php

Es posible agregar un identificador:

https://mimoodle.com/2024/login/index.php?buscando=error

De esta manera, los logs de acceso y error de Moodle tendrán la palabra clave “buscando=error”, lo que facilitará encontrar el log, ya que estos archivos pueden a guardar cientos de líneas de registro.

La ubicación de los archivos de apache y php, son las siguientes:

Acceso:

/var/log/apache2/access.log

Error:

/var/log/apache2/error.log

Php FPM:

/var/log/fpm-php.www.log

Nota: en estos archivos de logs, la información más reciente se escribe al final del archivo.

Errores más comunes de Moodle

Los errores que causan problemas en Moodle son los siguientes:

  • Complementos de Moodle que no son compatibles con la versión de la plataforma.
  • Utilización de complementos que no están optimizados.
  • Habilitación de estadísticas. En un examen Moodle, la generación de estadísticas en tiempo real afecta el servidor.
  • Utilización de librerías que hacen uso de funciones graficas. Todas las funciones que hacen uso de gráficos consumen una gran cantidad de memoria a nivel de sistema operativo, por usuario.
  • Utilización de complementos para mostrar la información de usuarios activos.
  • Temas que tienen errores Javascript.
  • Errores propios del código fuente de Moodle.

Páginas que ayudan a identificar el correcto funcionamiento del servidor

Moodle funciona con diferentes librerías, en la siguiente ruta de Moodle es posible validar que las librerías estén instaladas en el servidor:

Administración del sitio > servidor > entorno

Es posible validar los parámetros de configuración de Php, en la siguiente ruta de Moodle:

Administración del sitio > servidor > información php

En esta configuración no es necesario editar nada, Moodle debe funcionar correctamente y para uso masivo con las opciones por defecto. Los únicos parámetros que son necesarios modificar, en algunas ocasiones, para permitir la carga de archivos, son los siguientes:

post_max_size
upload_max_filesize

Para editar esos parámetros, es suficiente con colocar un archivo llamado “.user.ini” en la carpeta en donde se quieren aplicar (para php-fpm), por ejemplo:

nano /var/www/html/2024/.user.ini

El contenido de este archivo puede ser:

post_max_size = 100M
upload_max_filesize = 100M

Utilizar carpetas permite hacer que solo los scripts de la carpeta puedan cargar archivos de determinado tamaño. Al crear el anterior archivo con el usuario root, por motivos de seguridad, es necesario aplicar los permisos al usuario correcto.

chown www-data:www-data /var/www/html/2024/.user.ini

Descartar problemas de conexión a la base de datos

A nivel de aplicación, es posible descartar problemas de conexión o lentitud a la base de datos creando un archivo php que contenga una consulta a la base de datos de Moodle, este archivo tendrá solo las instrucciones necesarias para conectarse a la base de datos y puede tener código SQL para cargar, por ejemplo, 1000 registros.

Para medir el tiempo que tarda la base de datos en responder, se puede utilizar el siguiente código (ejemplo):

$inicio = microtime(true);

//implementación

$final = microtime(true);

echo "Tiempo requerido: ".number_format($final - $inicio, 5)." segundos";

La implementación, es el código Php para conectarse a la base de datos y ejecutar una consulta SQL, por ejemplo:

$hostname = "localhost";
$username = "moodle";
$password = "secret-password";
$db = "moodle";

$mysqli = new mysqli($hostname,$username,$password,$db);

if (mysqli_connect_errno()) {
    printf("Error: %s\n", mysqli_connect_error());
    exit();
}

$query = "SELECT * FROM mdl_user";

if ($result = $mysqli->query($query)) {

    echo "Se obtuvieron ".($result->num_rows)." registros<br/>".;
    $result->close();
}

$mysqli->close();

Para recibir boletines de información, por favor escribe tu correo electrónico:

Por favor ingrese un correo electrónico valido.
Registrado correctamente!