Fehlermeldungen erstes Projektsetup

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Fehlermeldungen erstes Projektsetup
Hallo beisammen, ich habe einen ganzen Schwung an Fehlern, merkwürdigerweise aber schon mit der Basisversion von Wahlzeit.
Ich habe keine Änderung gemacht außer ein paar Bilder einzufügen. Gradle test, Travis, Docker Hub & Co laufen ebenfalls schon.

Hat jemand ähnliche Probleme gehabt und idealerweise auch schon gefixt?

Mein System: IDEA 2019.2, Windows 10 (I know), Java 11

  1. Nach dem ersten Aufruf von appengineRun wird die Anwendung scheinbar nicht mehr ordnungsgemäß beendet, ich kriege bis zum Neustart nur noch “HTTP port number already in use: 8080”. Das Problem bleibt bestehen bis ich den PC neustarte.

Als Workaround habe ich es dann lokal mit docker-compose versucht:

  1. Docker Compose schafft keinen Build auf meinem Rechner, auf Travis aber schon. Ich vermute es liegt am Unterschied Alpine/Windows, will die Dockerfile aber nicht modifizieren ohne einen guten Grund dafür zu haben Falls jemand die folgende Fehlermeldung kriegt und unter Windows arbeitet sollte er die Zeilenendungen von “gradlew” von Windows (CRLF) zu Unix (LF) umstellen (https://stackoverflow.com/a/50507954/7924138):
docker-compose up
Building wahlzeit
Step 1/15 : FROM adoptopenjdk/openjdk8-openj9:alpine-slim as builder
 ---> 9d2727586b94
Step 2/15 : WORKDIR /builder
 ---> Using cache
 ---> 3e153467e1ff
Step 3/15 : COPY *.gradle /builder/
 ---> af0428862443
Step 4/15 : COPY src /builder/src
 ---> c0cdb94f9d5e
Step 5/15 : COPY gradle /builder/gradle
 ---> f86422055e0b
Step 6/15 : COPY gradlew /builder/gradlew
 ---> 8e3c54110acf
Step 7/15 : RUN ./gradlew test
 ---> Running in 09e8c14a607e
': No such file or directory
ERROR: Service 'wahlzeit' failed to build: The command '/bin/sh -c ./gradlew test' returned a non-zero code: 127
  1. Compose: network_mode: host funktioniert nur unter Linux, eine direkte Eingabe der IP des Containers als alternative sollte funktionieren, die konnte ich aber noch nicht trivial einfach rausfinden.

  2. Ich bekomme häufiger eine Fehlermeldung “Gradle: […] unable to delete file […]”, scheinbar wird der Daemon nicht ordentlich beendet, das kann ich jetzt grade aber nicht replizieren. Ein workaround ist regelmäßig gradlew --stop aufzurufen.


Okay, mit ein bisschen rumspielen komme ich einen Schritt weiter, stolpere aber über den nächsten Fehler:
5.

WARNING: level=sl, session=system, client=anon, exception reason=Initializing context failed, stacktrace=java.lang.IllegalArgumentException: robotis already known
	at org.wahlzeit.model.ClientManager.assertIsUnknownClientAsIllegalArgument(ClientManager.java:55)
	at org.wahlzeit.model.ClientManager.addClient(ClientManager.java:44)
	at org.wahlzeit.model.Client.initialize(Client.java:106)
	at org.wahlzeit.model.User.initialize(User.java:111)
	at org.wahlzeit.model.User.<init>(User.java:103)
	at org.wahlzeit.model.User.<init>(User.java:89)
	at org.wahlzeit.main.ModelMain.createUser(ModelMain.java:99)
	at org.wahlzeit.main.ServiceMain$1.vrun(ServiceMain.java:234)
	
[...]

Workaround zu 1:

Ports “freigeben” geht unter Windows mit Powershell:
Get-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
taskkill /PID #####


Hi MMF,

ich habe den gleichen Fehler, wenn ich in der gleichen Konsole “./gradlew appengineRun” beende und neustarte. Bekomme die Exception “java.lang.IllegalArgumentException: robotis already known” wie du und anschließend funktioniert der Server nicht mehr (Error Code 503).

Was dafür funktioniert ist, wenn ich im selben Verzeichnis aus einer anderen Konsole “./gradlew --stop” eingebe. Starte ich nun wieder mit “./gradlew appengineRun” (aus ursprünglicher Konsole) dann fährt der Server wieder normal hoch und die Seite erscheint wie gewohnt.

Bei mir funktioniert leider der Travis CI Build nicht. Ich bekomme den Fehler “The command “docker build -t ${IMAGE_NAME} .” exited with 125.”. Es scheint, als würde er ${IMAGE_NAME} nicht auflösen. Hast du irgendwie ein Image mit eingecheckt ins Github?

Viele Grüße!

1 „Gefällt mir“

Hi kawa_blue,

ich hab deinen workaround probiert, läuft leider auch nicht…
Ich habe zwei Terminals geöffnet und in denen abwechsend gestartet, beim anderen gestoppt und dann beim ersten wieder gestartet, leider immer noch der gleiche “robotis already known” Fehler. Auch im gleichen Fenster o.ä. hat sich nicht viel ergeben, ich habe auch schon “Instant Run” bei IDEA ausgestellt um sicher zu sein, ohne Erfolg.

Travis CI Build war bei mir kein Problem, nachdem ich DOCKERHUB_USER & DOCKERHUB_PW in den Umgebungsvariablen (bei Travis) eingestellt hatte. Ich habe dafür auch keine Dateien modifizieren müssen o.ä.


Kann mir jemand sagen ob ich mir alle Branches von Wahlzeit clonen sollte oder ob es reicht den Master branch zu clonen?


Bei mir hilft zur Lösung des “robot is already known”-Fehlers das in diesem Thread beschriebene Vorgehen: https://fsi.cs.fau.de/forum/thread/16562-Server-Error

Zwar nicht schön, aber immerhin läuft es damit wieder. (Zumindest wenn man den Gradle-Build manuell ausführt. Keine Ahnung, wie man das im Docker-Container tun könnte. Habe hier dasselbe Problem.)


@Chris.Hilz: master reicht, du willst aber forken, da suchst du dir ja sowieso einen Branch aus. Das ist ein größeres Thema, sollte aber (falls verstanden) straight forward sein.

@creative_name:Das ist aufwendig, hat aber tatsächlich funktioniert. Siehst du die neuen Bilder von dir auch? Bei mir kriege ich auf der lokalen Website nur die folgende Meldung:

Done!
Wow!! You've seen all the photos we can currently show you. To see more, please either adjust your photo filter or come back later.

Please don't forget to tell your friends about this website! And we love feedback, so please comment on our blog.

Please continue viewing photos!

Meine Bilder sind reguläre JPG in vernünftiger Größe und Auflösung, die Konsole zeigt folgendes:

Globals with ID 1 and the following parameters: last user ID: 1, last case ID: 0, last photo ID: 0, and last session ID: 0

Eventuell soll das aber auch noch nicht laufen, das kann ich nicht sagen, das kommt vielleicht erst mit CW#3.

Schlussendlich sind das alles - auch die von mir -nur aufwendige Workarounds, das muss für einen regulären Unterrichtsverlauf ja alles irgendwann behoben werden, so funktioniert keine Entwicklung.
Fehler im eigenen Code alleine zu lösen verstehe ich, das wird ja auch irgendwie erwartet, wenigstens der Basiscode sollte aber stabil genug funktionieren um darauf aufzubauen.
Je mehr Arbeit da in die Fehlersuche des vorgegebenen Codes gesteckt wird, desto weniger bleibt für unsere eigentliche individuelle Prüfungsleistung übrig.
Ohne eine Lösung ist eine weitere Bearbeitung der aktuellen und kommenden Aufgaben unmöglich, auch die “lösche willkürliche Ordner & Prozesse”-Lösung ist kein gangbarer Weg.

Ich kann mir auch nicht vorstellen, das Windows 10 alleine das KO-Kriterium für die Übungsaufgaben sein sollte, nutzt das jemand erfolgreich?
Es wäre gut wenn neue Posts einen groben Systemüberblick bei den Fehlermeldungen angeben, dann finden wir an den Schnittmengen zumindest raus welche Fehler wo vorkommen.

Gibt es einen “summon” oder eine Referenz, mit dem man den Prof. Riehle bzw. die Assistenten auf diesen Thread aufmerksam machen kann?


Also ich habe es geschafft, dass die Bilder auch angezeigt werden. (Wie gesagt nur mittels ./gradlew appenginRun und nicht im Docker-Container.)

Bei mir hat es aber nicht von Anfang an funktioniert. Ursprünglich war es wie bei dir, dass ich zwar Bilder im Ordner hatte, diese aber nicht “erkannt” wurden. Das Problem bei mir: Wahlzeit liegt in einer Ordner-Hierarchie, in der irgendwo ein Ordner ein Leerzeichen im Namen hat. Damit kommt Wahlzeit nicht zurecht. Lösung: In
src/main/java/org/wahlzeit/main/ModelMain.java
in createUser() ganz vorne einfügen:

photoDir = photoDir.replaceAll("%20", " ");

Bezüglich des “robot it already known”-Problems werde ich vielleicht ein kleines Skript schreiben, das vorm Start des Servers immer erst aufräumt.

Ist es wichtig, dass man Wahlzeit auch in einem Docker-Container starten kann? Oder reicht es für die Bearbeitung der Hausaufgaben auch aus, wenn man es direkt per Gradle startet?

In meinem Fall kann ich mich nicht mit Wahlzeit verbinden, wenn ich Docker nutze. localhost:Port im Browser aufzurufen hilft also nicht. Habe den Port in der docker-compose.yml auch variiert (die Angabe vor dem Doppelpunkt im Port-Mapping), das hat aber nicht geholfen. Andere Docker-Anwendungen laufen (halbwegs) problemlos. Beim Ausführen von docker-compose up gibt es zwar kleine Warnungen (z.B. WARNING: Unable to add photo), aber keine Exceptions oder so. Der Server gibt dann aus:

INFO: Dev App Server is now running

Falls Docker also wichtig ist, werde ich es mal auf einer anderen Maschine probieren und evtl. in einer VM oder per SSH im CIP. (Letzteres könnte etwas komplizierter werden, weil wir ja auch den Browser brauchen.)

1 „Gefällt mir“

Blöde Frage: Muss ich mir auf Dockerhub.com ein Account machen oder sind das die Credentials für das Github repo?


Hi creative_name,

ich habe es ohne docker-compose gemacht und es funktioniert bei mir (Linux Rechner):

Erst gebaut: „sudo docker build -t wahlzeit .“
Dann ausgeführt: „sudo docker run --network=host -p 8080:8080 wahlzeit“

Probier es doch mal mit den Befehlen. Ich komm mit dem Browser auf die Webseite.

Viele Grüße!


@kawa_blue

Zur ersten Frage: Du benötigst einen Account auf hub.docker.com und musst Benutzernamen/Passwort auch in Travis hinterlegen. Siehe README.md (Punkt “Activate Travis CI”).

Zum Tipp bezüglich Docker: Vielen Dank für den Hinweis! Das funktioniert bei mir leider aber auch nicht. Im Browser kann ich mich weiterhin nicht mit der Seite verbinden. Paar Ideen hab ich noch, die werde ich einfach mal ausprobieren…

Es wäre schön, wenn jemand von den Verantwortlichen mal sagen könnte, ob man Wahlzeit zwingend mittels Docker ausführen können soll.


Ist nicht zwingend notwendig. Ihr könnt Wahlzeit auch manuell mit ./gradlew appengineRun starten. Für TravisCI sollte Wahlzeit allerdings schon Docker gebaut und auf DockerHub gepusht werden.
Uns ist bewusst, dass es mit Docker Probleme geben kann (insb. unter Windows). Deswegen wird es auch keine Hausaufgabe mit eigener Docker-Implementierung geben.


Vielen Dank für die Info! Travis hatte bei mir keine Probleme, alles zu bauen und auf DockerHub zu pushen, deshalb freut es mich, dass das so ausreicht. :slight_smile:


Bei mir auf dem Mac habe ich das gleiche Problem. Docker compose läuft ohne zu meckern durch, danach lässt sich wahlzeit aber nicht auf localhost öffnen – das geht nur über ./gradlew appengineRun.

Falls jemand hier auch mit Mac OS unterwegs ist und Wahlzeit in einem Docker-Container erfolgreich starten konnten, dann wäre es cool wenn der / die sich meldet :slight_smile:


Für diejenigen die sich nicht auf die Wahlzeitinstanz im Dockercontainer verbinden können, sollten wie bereits von kawa_blue beschrieben das –network=host Argument mit angeben.
Dies ist manchmal notwendig wenn man macOS oder Windows als Host-OS verwendet.

sudo docker run --network=host -p 8080:8080 wahlzeit

Welche Architektur verwendest Du?


Wir mergen immer alles in den Master zurueck. Wir beabsichtigen aber, bis auf dringende Bugfixes (hoffentlich keine), nichts neues nach Semesterbeginn zu pushen. Somit sollte kein Pull auf den Master notwendig werden und die Branches brauchen Sie gar nicht.


Vielen Dank für den Tipp. Leider funktioniert es für mich auf dem Mac damit im Browser immer noch nicht, obwohl in der Konsole “Dev App Server is now running” ohne irgendwelche Fehlermeldungen steht.


So nachdem es bei mir initial lief, hab ich vorhin mal testweise in Eclipse mit dem Remote Debugging gespielt und seitdem kann ich den gradle Build über ./gradlew appEngineRun auch nicht mehr manuell starten. Es ist genau der gleiche 503 Fehler und die IllegalArgumentException “robotis already known” obwohl ich immer ./gradlew --stop aus einer anderen Konsole heraus ausgeführt habe. Habe auch schon mir die Prozesse anzeigen lassen, aber alle Gradle Daemons sind beendet und der 8080 Port soweit frei.

Bis jetzt hab ich diesbezüglich nur einen Weg gefunden nach einem manuellen gradle Build wahlzeit ein weiteres mal starten zu können: Dazu muss ich nach einem build in git/wahlzeit den “build” Ordner vor dem nächsten Ausführen löschen.

Woran könnte das liegen?