Nutmeg ist die neueste benannte Version von Open edX. Es erschien am 9. Juni 2022. In diesem Beitrag werfen wir einen Blick auf die jüngsten Änderungen an der Bediener- und Entwicklererfahrung (d. h. Personen, die Code für Open edX schreiben oder eine Open edX-Instanz bereitstellen). Dazu gehören einige der neuesten und besten Tutor-Änderungen, ein Fokus auf Open edX-Ereignisse und -Filter sowie einige kritische Anmerkungen zu Verwerfungen, Entfernungen und Sicherheitsupdates.
Tutor-Highlights
Änderungen an Tutor seit der Veröffentlichung von Maple sind auf der beschrieben Tutor-Änderungsprotokoll – Versionen 13.0.1 bis 14.0.0. Einige Highlights sind:
Tutor-Funktionen und -Verbesserungen
- Eine neue und erweiterte Plug-in-API „Version 1“. basierend auf der Idee von „Haken“, die Erweiterungspunkte sind, die es Plugins ermöglichen, auf die Aktionen von Tutor zu reagieren und das Verhalten von Tutor mithilfe von Datenfiltern zu ändern. Das alte Plug-in-API „Version 0“. wird weiterhin unterstützt, obwohl Plug-in-Entwickler ermutigt werden, auf die neue API umzusteigen.
- Umfassendere Anweisungen während des Upgrades
- Mehrere neue Befehle:
- `tutor k8s apply`: eine direkte Schnittstelle mit `kubectl apply`
- `tutor [dev|local|k8s] status`: liefert Systeminformationen zum Status
- `tutor dev quickstart`: eine Variante von `tutor local quickstart`, die die Reibung im Entwicklungsprozess reduziert
- `tutor [local/dev] copyfrom`: kopiert Inhalte aus einem Container
- -m/–mount`: eine Option, die mehreren lokalen und dev-Befehlen hinzugefügt wurde, um Ordner vom Host automatisch zu binden und einzuhängen, wodurch der alte „bindmount“-Befehl und die „–volume“-Optionen ersetzt werden.
- `tutor dev start SERVICE` ermöglicht jetzt das Anhängen an den Dienst zum Debuggen von Haltepunkten.
- Das Starten von „dev“-Containern stoppt jetzt „lokale“ Container und umgekehrt.
- Möglichkeit, benutzerdefinierte Pakete zu installieren und Befehle als Root im Docker-Image auszuführen
- Möglichkeit, „EDX_PLATFORM_REPOSITORY“ und „NPM_REGISTRY“ über „config.yml“ statt als Docker-Build-Argumente zu überschreiben.
- Möglichkeit, Kurse auf der /course-Suchseite des LMS auszublenden, indem die Kurssichtbarkeit in Studio auf „none“ gesetzt wird.
- Beständige Noten sind jetzt standardmäßig aktiviert.
Tutor-Abwertungen und Breaking Changes
- `tutor dev runserver` wird zugunsten von `tutor dev start` verworfen.
- „tutor k8s exec“ ”` (mit Anführungszeichen) ist veraltet; Verwenden Sie stattdessen `tutor k8s exec `. Dies stimmt mit der Syntax von `tutor local exec überein `.
- Die Unterstützung für die Umgebungsvariable `TUTOR_EDX_PLATFORM_SETTINGS` wurde eingestellt. Es wird jetzt empfohlen, stattdessen ein Plugin zu erstellen.
- lms.env.json & cms.env.json sind jetzt `lms.env.yml` & cms.env.yml; Plugin-Entwickler müssen mehrere Patches neu formatieren, um das YAML-Format zu verwenden.
Und mehrere Tutor-Sicherheits- und Fehlerbehebungen; siehe die Tutor-Änderungsprotokoll – Versionen 13.0.1 bis 14.0.0 für mehr.
Öffnen Sie edX-Ereignisse und -Filter
Öffnen Sie edX-Ereignisse und -Filter Fügen Sie eine neue Möglichkeit hinzu, den Kern zu erweitern, ohne sich mit den Interna der edx-Plattform herumschlagen zu müssen (diese Arbeit ist Teil von OEP-50: Hooks-Erweiterungsframework).
- Open edX Events: Diese standardisierte Version von Django Signals ermöglicht es Entwicklern, die Plattformfunktionalität zu erweitern, indem sie einfach auf das Ereignis hören, das nach Abschluss eines Schlüsselprozesses gesendet wird, z. B. nach Registrierung, Anmeldung, Registrierung usw.
- Offene edX-Filter: Nur durch Konfiguration können Entwickler von Erweiterungen eine Liste von Funktionen festlegen, die ausgeführt werden sollen, bevor ein wichtiger Prozess beginnt, z. B. vor der Registrierung, Anmeldung, Registrierung usw.
Weitere Informationen finden Sie unter die OEP, hat das Dokumentation, oder sehen Sie sich Felipe Montoyas an Open edX 2022 Konferenzpräsentation über den Hintergrund, die Architektur und die Verwendung dieses Produkts.
Wichtiger Verwaltungsbefehl zum Ausführen und Konfigurieren der Var zum Festlegen
Eine interne Leistungsverbesserung namens „Lernsequenzen“ wurde für einige Releases aktiviert, ist aber jetzt für Nutmeg immer aktiviert. Wenn Sie Kurse haben, die nicht auf Koa oder später neu veröffentlicht wurden, führen Sie vor dem Upgrade den cms-Django-Befehl „simulate_publish“ in Ihren Kursen aus, um die Lernsequenzdaten zu füllen.
Wenn der Konfigurationswert CLOSEST_CLIENT_IP_FROM_HEADERS nicht festgelegt wird, kann dies dazu führen, dass der legitime Datenverkehr eingeschränkt wird oder Brute-Force-Angriffe nicht blockiert werden, je nach Proxy-Setup.
Abschreibungen und Entfernungen
Die folgenden Verwerfungen und Entfernungen wurden seit der Veröffentlichung von Maple vorgenommen:
- Das Repo der edx-Zertifikate wurde archiviert
- Bok-choy (eine Testplattform) wurde archiviert
- Die django-ratelimit-backend-Bibliothek wurde von der edx-Plattform entfernt; das standardmäßige django-ratelimit-Backend wird jetzt verwendet. Dies hat den Nebeneffekt, dass das standardmäßige Django-Admin-Anmeldefenster entfernt wird; Benutzer müssen sich jetzt zuerst über das LMS anmelden.
- Der Kurszugang „Old Mongo“ wurde endlich vollständig entfernt. Das bedeutet, dass Kursläufe mit Schlüsseln wie Org/Course/Run anstelle von course-v1:Org+Course+run (sichtbar in der URL jeder Kursseite) von Lernenden nicht aufgerufen werden können.
Weitere Informationen hierzu finden Sie unter Abschreibungen und Entfernungen Abschnitt der Muskat-Wiki-Seite.
Sicherheitsverbesserungen
Es sind zwei wichtige Sicherheitsverbesserungen zu verstehen: ein neuer Konfigurationswert (CLOSEST_CLIENT_IP_FROM_HEADERS), der festgelegt werden muss, und Änderungen an der SafeSessionMiddleware, die vor dem Upgrade auf Nutmeg beachtet werden müssen.
- CLOSEST_CLIENT_IP_FROM_HEADERS ist ein neuer Konfigurationswert, den alle Bereitstellungen festlegen sollten.
- Wenn Sie dies nicht festlegen, kann dies dazu führen, dass legitimer Datenverkehr die Rate begrenzt oder Brute-Force-Angriffe nicht blockiert werden, je nach Proxy-Setup.
- Dies ist eine sicherheitsrelevante Einstellung, die Ihrer Bereitstellung mitteilt, wie die IP-Adresse des Clients ermittelt werden soll. Unter opensx.core.djangoapps.util.ip finden Sie eine Dokumentation darüber, wie (und warum) dies konfiguriert wird (sowie die zugehörige NUM_PROXIES-Einstellung für django-rest-framework).
- SafeSessionMiddleware ist eine vorhandene Middleware, die mehrere Schutzmaßnahmen gegen Schwachstellen bietet, die aus Cache-Fehlkonfigurationen oder anderen Fehlern resultieren könnten, die dazu führen, dass ein Benutzer die Sitzung eines anderen Benutzers erhält.
- Früher protokollierte die Middleware Warnungen, wenn ein Benutzerkonflikt zwischen Anforderung oder Sitzung und Antwort erkannt wurde; Jetzt wird die Sitzung ungültig und eine Fehlerantwort gesendet. Der Schalter ENFORCE_SAFE_SESSIONS ist standardmäßig aktiviert, kann aber deaktiviert werden, um nur Warnungen zu protokollieren.
- Vor dem Upgrade auf Nutmeg: Stellen Sie sicher, dass Ihre Protokolle keine Warnungen enthalten, die mit „SafeCookieData user at request“ beginnen, oder dass diese Warnungen sehr selten sind. Wenn sie häufig vorkommen, liegt wahrscheinlich ein Fehlalarm vor, der durch einen benutzerdefinierten Anmelde-, Masquerading- oder Registrierungscode verursacht wird, der mark_user_change_as_expected aufrufen muss. Andernfalls können gültige Anfragen abgelehnt werden.
Weitere Informationen finden Sie unter Versionshinweise oder unter der Muskat-Wiki-Seite.
![]()