Coding4Kids-IDE auf Frischzellenkur
Nach vier Jahren braucht es ein großes Update, so ein Update bereitet aber auch so manches Kopfzerbrechen. (31.03.2019)
Förderjahr 2018 / Project Call #13 / ProjektID: 3880 / Projekt: Coding4Kids-IDE

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

Tags:

Meteor NodeJS MongoDB

Franz Knipp

Profile picture for user franz.knipp
Die Welt der Technik, im besonderen Computer, interessieren mich seit Kindesalter an. So war es nur logisch, dass ich mich für eine technische Ausbildung entschied. Während des Studiums an der TU Wien begann sich „das Internet“ in Österreich zu verbreiten, und so fand ich im Entwickeln von Webseiten und ganzen Webanwendungen meine Berufung und meinen Beruf.

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 :-)

Skills:

Softwareentwicklung
,
Linux
,
Geschäftsführung
CAPTCHA
Diese Frage dient der Überprüfung, ob Sie ein menschlicher Besucher sind und um automatisierten SPAM zu verhindern.