Nutmeg es la última versión nombrada de Open edX. Salió el 9 de junio de 2022. En esta publicación, veremos los cambios recientes en la experiencia del operador y del desarrollador (es decir, las personas que escriben código para Open edX o implementan una instancia de Open edX). Esto incluye algunos de los últimos y mejores cambios de Tutor, un enfoque en los eventos y filtros de Open edX, y algunas notas críticas sobre obsolescencias, eliminaciones y actualizaciones de seguridad.
Puntos destacados del tutor
Los cambios en Tutor desde el lanzamiento de Maple se detallan en la Registro de cambios del tutor – versiones 13.0.1 a 14.0.0. Algunos aspectos destacados son:
Características y mejoras del tutor
- Una nueva y ampliada API de complemento "Versión 1" basado en la idea de "manos", que son puntos de extensión que permiten que los complementos reaccionen a las acciones de Tutor y modifiquen el comportamiento de Tutor mediante filtros de datos. El viejo API de complemento "Versión 0" todavía es compatible, aunque se recomienda a los desarrolladores de complementos que se cambien a la nueva API.
- Instrucciones más completas durante la actualización
- Múltiples comandos nuevos:
- `tutor k8s apply`: una interfaz directa con `kubectl apply`
- `tutor [dev|local|k8s] status`: proporciona el estado de la información del sistema
- `tutor dev quickstart`: una variante de `tutor local quickstart` que reduce la fricción en el proceso de configuración del desarrollo
- `tutor [local/dev] copyfrom`: copia contenidos de un contenedor
- -m/–mount`: una opción añadida a varios comandos locales y dev para enlazar y montar automáticamente carpetas desde el host, reemplazando el antiguo comando `bindmount` y las opciones `–volume`.
- `tutor dev start SERVICE` ahora permite la conexión al servicio para la depuración de puntos de interrupción.
- Iniciar contenedores `dev` ahora detiene los contenedores `locales`, y viceversa.
- Capacidad para instalar paquetes personalizados y ejecutar comandos como raíz en la imagen de Docker
- Capacidad para anular `EDX_PLATFORM_REPOSITORY` y `NPM_REGISTRY` a través de `config.yml` en lugar de como argumentos de compilación de Docker.
- Capacidad para ocultar cursos de la página de búsqueda de /curso del LMS configurando la visibilidad del curso en "ninguno" en Studio.
- Las calificaciones persistentes ahora están habilitadas de manera predeterminada.
Desaprobaciones de tutores y cambios importantes
- `tutor dev runserver` está en desuso en favor de `tutor dev start`.
- `tutor k8s exec “ ”` (entre comillas) está en desuso; en su lugar, use `tutor k8s exec `. Esto se alinea con la sintaxis de `tutor local exec `.
- Se eliminó el soporte para la variable de entorno `TUTOR_EDX_PLATFORM_SETTINGS`. Ahora se recomienda crear un complemento en su lugar.
- lms.env.json & cms.env.json ahora son `lms.env.yml` & cms.env.yml; Los desarrolladores de complementos deben reformatear varios parches para usar el formato YAML.
Y múltiples correcciones de errores y seguridad de Tutor; ver el Registro de cambios del tutor – versiones 13.0.1 a 14.0.0 para más.
Eventos y filtros de Open edX
Eventos y filtros de Open edX agregue una nueva forma de extender el núcleo sin tener que meterse con las partes internas de edx-platform (este trabajo es parte de OEP-50: Marco de extensión de ganchos).
- Open edX Events: esta versión estandarizada de Django Signals permite a los desarrolladores ampliar la funcionalidad de la plataforma simplemente escuchando el evento que se envía después de que finaliza un proceso clave, por ejemplo, después de la inscripción, inicio de sesión, registro, etc.
- Filtros Open edX: solo a través de la configuración, los desarrolladores de extensiones pueden establecer una lista de funciones que se ejecutarán antes de que comience un proceso clave, por ejemplo, antes de la inscripción, el inicio de sesión, el registro, etc.
Para más información, lea la OEP, la documentación, o ver la de Felipe Montoya Presentación de la conferencia Open edX 2022 sobre los antecedentes, la arquitectura y el uso de este producto.
Comando de administración importante para ejecutar y configurar Var para establecer
Se ha optado por una mejora de rendimiento interna llamada "secuencias de aprendizaje" para algunos lanzamientos, pero ahora está siempre activa para Nutmeg. Si tiene algún curso que no se haya vuelto a publicar en Koa o posterior, ejecute el comando django de simulación_publicación cms en sus cursos antes de actualizar, para completar los datos de la secuencia de aprendizaje.
Si no se establece el valor de configuración CLOSEST_CLIENT_IP_FROM_HEADERS, es posible que se limite la velocidad del tráfico legítimo o que no se bloqueen los ataques de fuerza bruta, según la configuración de su proxy.
Depreciaciones y eliminaciones
Se han realizado las siguientes obsolescencias y eliminaciones desde el lanzamiento de Maple:
- El repositorio de edx-certificates ha sido archivado
- Bok-choy (una plataforma de prueba) ha sido archivado
- La biblioteca django-ratelimit-backend se eliminó de edx-platform; el backend estándar django-ratelimit ahora está en uso. Esto tiene el efecto secundario de eliminar la ventana de inicio de sesión de administrador de Django predeterminada; los usuarios ahora deben iniciar sesión primero a través del LMS.
- El acceso al curso "Old Mongo" finalmente se eliminó por completo. Esto significa que los alumnos no pueden acceder a las ejecuciones de cursos que tienen claves como Org/Curso/Ejecutar en lugar de curso-v1:Org+Curso+ejecutar (visible en la URL de cualquier página del curso).
Para obtener más información sobre estos, consulte el Desaprobaciones y eliminaciones sección de la página wiki de Nutmeg.
Mejoras de seguridad
Hay dos mejoras de seguridad importantes para entender: un nuevo valor de configuración (CLOSEST_CLIENT_IP_FROM_HEADERS) que debe establecerse y cambios en SafeSessionMiddleware que requieren atención antes de actualizar a Nutmeg.
- CLOSEST_CLIENT_IP_FROM_HEADERS es un nuevo valor de configuración que todas las implementaciones deben establecer.
- Si no se establece esto, se puede producir una limitación de la velocidad del tráfico legítimo o no bloquear los ataques de fuerza bruta, según la configuración de su proxy.
- Esta es una configuración que afecta la seguridad que le indica a su implementación cómo determinar la dirección IP del cliente. Consulteopenx.core.djangoapps.util.ip para obtener documentación sobre cómo (y por qué) configurar esto (así como la configuración NUM_PROXIES relacionada para django-rest-framework).
- SafeSessionMiddleware es un middleware existente que brinda varias protecciones contra vulnerabilidades que podrían resultar de configuraciones incorrectas de caché u otros errores que hacen que un usuario obtenga una sesión de otro usuario.
- Anteriormente, si se detectaba una discrepancia de usuario entre la solicitud o la sesión y la respuesta, el middleware registraba advertencias; ahora, invalidará la sesión y enviará una respuesta de error. La alternancia ENFORCE_SAFE_SESSIONS está habilitada de forma predeterminada, pero se puede deshabilitar para volver a registrar solo las advertencias.
- Antes de actualizar a Nutmeg: Verifique que sus registros no contengan advertencias que comiencen con "Usuario de SafeCookieData a pedido", o que estas advertencias sean muy raras. Si son comunes, es probable que haya un falso positivo causado por algún código de registro, enmascaramiento o inicio de sesión personalizado que necesita llamar a mark_user_change_as_expected. De lo contrario, las solicitudes válidas pueden ser rechazadas.
Para obtener más información, consulte el notas de la versión o Página wiki de nuez moscada.