Förderjahr / / ProjektID: / Projekt: Coding4Kids-IDE auf Frischzellenkur
Nach vier Jahren ist ein großes Update angesagt. Da gibt es so manche Falle, aber dank Open Source kann man sich ja selbst helfen.
Update ist doch ganz easy…
Im letzten Beitrag habe ich Meteor als die gewählte Applikationsplattform vorgestellt. Meteor bringt seinen eigenen Update-Befehl mit, und erfahrungsgemäß klappt dieser Update recht gut. Für das Update ist einfach im Projekt-Ordner der folgende Befehl auszuführen:
meteor update
Die essentiellen Pakete, die als Teil von Meteor mitgeliefert werden, sind damit am neuesten Stand. Auch diverse Pakete werden einem Update unterzogen. Wenn der Start der Applikation ohne Fehlermeldung abläuft und die Applikation bei den Tests funktioniert, ist alles perfekt.
…solange auch die Pakete kompatibel sind.
Und so kommt es, dass es dann doch nicht klappt, und ein bisschen Fehlersuche notwendig ist. Diversen Pakete, die von den Benutzern in der Vergangenheit veröffentlicht worden sind, geht die ständige Betreuung ab. Hier kann aber Open Source seine Stärken voll ausspielen:
-
Der Quellcode ist verfügbar, und vielleicht lassen sich die benötigten Änderungen selbst anfertigen, oder
-
ein andere ProgrammiererIn hat den Fehler schon behoben und in Form eines eigenen Pakets bereitgestellt.
Letztendlich musste ich mich mit beiden Varianten vertraut machen.
Verwenden eines anderen Pakets
Das Verwenden eines anderen Pakets ist in der Meteor-Welt sehr einfach. Auf https://atmospherejs.com/ findet man alle veröffentlichen Meteor-Pakete, wobei die Benutzerpakete die Namenskonvention Benutzername:Paketname vorweisen, z. B. edemaine:sharejs
. Dieses Paket ersetzte das originale mizzao:sharejs
. Nachdem der Quellcode auf Github veröffentlicht ist, können die Änderungen zwischen den Versionen leicht festgestellt werden.
Der Umstieg geht entsprechend einfach:
meteor remove mizzao:sharejs meteor add edemaine:sharejs
Einen ausführlichen Artikel zu dem Thema gibt’s in meinem Blog.
Anpassen des Meteor-Pakets
Damit der Editor ACE, den ich in der Online-IDE verwende, mit dem geänderten Paket kompatibel bleibt, musste ich dessen Paket anpassen.
Die lokale Entwicklung von Paketen (im Meteor-Jargon Packages) ist dabei sehr einfach. Im Ordner packages habe ich per Symlink den Paketordner eingebunden, und schon steht das Paket nach einem meteor add
paketname
zur Verfügung. Um die Entwicklung zu beschleunigen, werden auch Änderungen in den Paketordnern von Meteor erkannt und automatisch eine neue Version erzeugt, die auch gleich mittels Hot Code Push im Browser aktualisiert wird.
Kleine Änderung, große Wirkung: Alle Vorkommen des früheren Paketnamens wurden auf den neuen Namen ausgebessert, wie der Commit offenbart. Mehr war nicht notwendig.
Zuletzt habe ich das Paket noch in Atmosphere hochgeladen, damit ich es im Roll-Out auf meine Server nutzen kann.
… und auch eines NPMs
Auf meinem Server funktionierte die Applikation nach diesen Änderungen, aber in der Entwicklungsumgebung traten noch Fehler auf. Die Ursache war bald gefunden: Auf dem Produktionsserver läuft noch MongoDB in Version 3, aber das aktuelle Meteor bringt MongoDB in Version 4.
Um dieses Problem zu lösen, musste ich tiefer in den Quellcode greifen, konkret in das NPM, das die Datenbankbefehle enthält und im Meteor-Paket referenziert war. Anstatt der Versionsnummer war da schon im Original eine URL definiert, wo das Paket mit den erforderlichen Bugfixes bereitsteht. Mittels einer file:///-URL können auch lokale Verzeichnisse angegeben werden, was die Entwicklung vereinfacht.
Inzwischen ist der Fehler ausgebessert. Die Veröffentlichung der dazugehörigen Pakete steht aber noch aus, ich arbeite noch an einer weiteren Änderung.
Alles Update, oder was?
Beim Aktualisieren von Meteor für Produktionsumgebungen sind noch zwei Punkte zu beachten, damit die neuen Pakete gut funktionieren.
-
Einerseits muss man auf eine kompatible Version der MongoDB achten. Hier war in den letzten vier Jahren einmal ein Update der Datenbank erforderlich, das eine Migration der Daten von einem früheren Speicherformat in das neue Format erforderte, was letztendlich mit einem Datenbankex- und nachfolgendem -import gut gelöst werden konnte.
-
Andererseits braucht jede Meteor-Version eine passende Version von NodeJS. In meiner Produktionsumgebung liegen mehrere Applikationen mit jeweils anderen Meteor-Versionen. Die Lösung besteht darin, dass ich für jede Applikation die passende NodeJS-Version bereitstelle.
Veröffentlichung auf Github
Mit der durchgeführten Aktualisierung war es auch Zeit, das Projekt in das öffentliche Github-Repository zu stellen: https://github.com/Coding4KidsAT/coding4kids-ide
Viel Spaß beim Ausprobieren!
Photo by Brett Jordan on Unsplash
Franz Knipp
2011 gründete ich nach über zehn Jahren und einer Menge großer Projekte mein eigenes Unternehmen (qnipp GmbH), um in meinem Wohnort meiner Frau und mir (und momentan drei weiteren Personen) einen Arbeitsplatz im Bereich der Software-Entwicklung zu schaffen. Zu dieser Tätigkeit gesellte sich das Unterrichten an der Fachhochschule Burgenland, das mir große Freude bereitet. Im Kontakt mit den IT-Studierenden fiel mir deren Abneigung gegen das Programmieren auf, sodass ich beschloss, mittels Coding Workshops für 10- bis 14-Jährige Abhilfe zu schaffen und den Kindern meine eigene Begeisterung für diese Tätigkeit zu vermitteln.
Motto: Have fun, teach (with) passion, be a creative coder :-)