Aus den Quellen bauen

Hi,

ich habe mich ein bisschen mit den Quellen auf github vertraut machen wollen. Dabei ist mir aufgefallen, dass das Repo hub-console archiviert ist. Es sieht für mich so aus, dass alles Sourcen jetzt in https://github.com/alarmdisplay/hub enthalten sind.

Daher habe ich wie im Readme versucht, das Programm mit npm start zu starten. Dabei kommen die folgenden Fehler:

root@8ff5cef3e50a:/usr/local/hub/server# npm start

> hub-backend@1.0.0-beta.1 start /usr/local/hub/server
> npm run compile && node lib/


> hub-backend@1.0.0-beta.1 compile /usr/local/hub/server
> shx rm -rf lib/ && tsc

src/services/index.ts:4:21 - error TS2307: Cannot find module './uploads/uploads.service' or its corresponding type declarations.

4 import uploads from './uploads/uploads.service';
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~

src/services/ocr/ocr.class.ts:23:19 - error TS2339: Property 'on' does not exist on type 'never'.

23     uploadService.on('created', (blobResult: BlobResult) => this.onUpload(blobResult))
                     ~~

src/services/watchedfolders/watchedfolders.class.ts:112:32 - error TS2339: Property 'create' does not exist on type 'never'.

112           await uploadsService.create({ buffer: buffer, contentType: 'application/pdf' })
                                   ~~~~~~

src/services/watchedfolders/watchedfolders.class.ts:208:39 - error TS2339: Property 'create' does not exist on type 'never'.

208                 return uploadsService.create({ buffer: buffer, contentType: 'application/pdf' })
                                          ~~~~~~


Found 4 errors.

Es sieht für mich so aus, als ob der Ordner src/services/uploads im neuen repo fehlen würde. Kann das sein?

Anschließend habe ich dann probiert das Programm (mit dem kopierten Ordner aus hub-console) zu starten und bekomme anschließend folgenden Fehler:

2020-09-27T15:07:52.455] [WARN] default - The static files for the console UI could not be found, the path /console will not work

Ich habe leider von Nodejs keine Ahnung. Was muss man machen, um das Programm aus den Quellen zu bauen?

Viele Grüße
Andi

Hallo,

tut mir leid für die späte Antwort.

Deine Beobachtung ist richtig, die zuvor einzeln geführten Repos für hub und display wurden archiviert und in jeweils ein Repo zusammengeführt.

Tatsächlich, da ist mir bei der Zusammenführung der upload-Service durchgerutscht, der fehlt im Repo. Im Beta-Release ist er aber enthalten. Der Unterschied zu den Quellen ist hier, dass die console gebaut und der Ordner an die richtige Stelle verschoben wurde. (Das löst dann auch den zweiten Fehler).

Wenn du diese Anleitung befolgst, sollte es eigentlich klappen. Aber melde dich gerne, wenn es doch nochmal haken sollte.

Der Prozess zum Bauen aus den Quellen ist noch nicht richtig dokumentiert bzw. automatisiert. Ich hatte mal was gebaut, aber das ist durch die Zusammenführung der Repos wieder hinfällig geworden und noch nicht wieder repariert.

Viele Grüße,
Andreas

1 Like

Hi Andreas,

kein Problem.

Ich habe dir gerade zwei Pull-Requests geschickt. Ich wollte die Anwendung aus einem Container heraus starten. Ich fand es eleganter, dazu die benötigten Dateien aus den Quellen zu bauen, anstatt es herunterzuladen.

Die benötigten Dateien sind in dem Pull-Request enthalten. Vielleicht erleichtert es Anderen auch den Einstieg und ich kann hierdurch indirekt zur Dokumentation beitragen.

Folgendes ist mir hierbei aufgefallen:

  1. Beim ersten starten der Container mit docker-compose wird die Datenbank erst eingerichtet, jedoch startet die Applikation schon und schlägt daher mit einem Fehler fehl. Wäre es machbar, dass man in einer Schleife auf die Datenbank eine gewisse Zeit wartet?

  2. Wenn die Datenbank frisch nach deiner Anleitung aufgesetzt wurde, stürzt die Anwendung reproduzierbar mit dem Fehler [ERROR] default - Could not query folders to watch { GeneralError: Table 'ad_hub.hub_watched_folders' doesn't exist ab. Daher sollte entweder die Datenbank richtig initialisiert werden oder das Programm selbst übernimmt die Initialisierung. Beim zweiten Start (eigentlich der Dritte, siehe 1.) klappt es fehlerfrei.

Weiterhin würde ich anregen, dass man die Applikationen komplett per Code initialisieren kann. Das heißt per API alle benötigten Keys usw. anlegen und entsprechend weiterverwenden und auch die Displays anlegen und konfigurieren kann. Ich vermute, das ist bisher wenn dann über einen Dump der Datenbank möglich.

Viele Grüße
Andi

1 Like

Hi Andi,

vielen Dank! Ich bin leider erst jetzt dazugekommen, mir die PRs mal genauer anzusehen. Klasse Arbeit, das passt schon mal zu sehr großen Teilen zu dem, wie ich mir es vorgestellt hatte. Anmerkungen mache ich dann direkt im PR.

Das depends_on von docker-compose legt ja leider nur die Startreihenfolge fest und wartet nicht bis ein Container wirklich bereit ist. Ja, das wäre sinnvoll, dass der Datenbank zu Beginn eine gewisse Zeit eingeräumt wird. Sollte es in dieser Zeit nicht klappen, kann man den Prozess immer noch mit einem Fehler beenden.

Ja, das habe ich noch so im Kopf, dass FeathersJS an dieser Stelle kein Promise anbietet, auf das man Warten könnte. Da gab es mal einen Issue dazu, ich mache mich mal schlau, ob es da Fortschritt gab. Ansonsten gibt’s erst mal einen schmutzigen Check, ob alle Tabellen da sind, bevor es weitergeht.

In der Theorie müsste das jetzt schon gehen, da der erste Benutzer sich selbst registrieren darf. Ab da kannst du über die API alles machen. Allerdings bräuchte es dann noch einen Weg, die API-Keys für die Displays in den localStorage der Browser zu bekommen. Die Datenbank hätte ich erst mal als gegeben und dauerhaft angenommen, auch über Updates hinweg. Falls die wirklich mal neu gemacht werden sollte, ist ja bestimmt ein Backup vorhanden :grin:

Hi,

ich bin gespannt auf eine Kommentare :slight_smile:. Ich habe mittlerweile ein paar kleine Änderungen/Verbesserungen lokal, die ich eventuell noch pushen müsste/sollte, da mein ursprünglicher Vorschlag nicht funktionierte.

Ansonsten läuft es schon ganz gut. Ich habe auch drei Testfaxe von der ILS bekommen, die richtig erkannt werden. Die Faxe hatte ich mit der Fritzbox abgefangen. Leider erkennt tesseract bei allen Dateien manche Buchstaben nicht richtig, wie zum Beispiel 0 (Null) anstannt O. Ich vermute das müsste man noch per regexp abfangen. Ich melde mich dazu aber nochmal später.

Aktuell versuche ich, die Applikation mit VS Code und einem Debugger zum Laufen zu bekommen, damit ich hoffentlich beim Testen ein bisschen schneller bin. Zieht sich aktuell, da ich keine Ahnung von Typescript/Java Script habe :smiley:

Hier noch ein Kommentar zu deiner Anmerkung.

Ich habe meine Änderungen nochmal auf deinen Commit 2b372c724d1dd gerebased. Und ich bilde mir ein, dass dadurch das Problem behoben ist.

Vielen Dank und viele Grüße