Depuración de errores en Moodle
Tiempo total: 0 días con 19:50:27 hrs
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.
¿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:
- Información Javascript.
- Información de red (descarga de archivos).
- Errores php.
- 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”.
En el inspector de elementos, todos los errores Javascript aparecen en la sección de “console”.
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.
En esta imagen es posible ver que todos los archivos se descargaron con el estado de respuesta 200 Ok.
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.
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.
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.
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:
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();