Tornado webserver

  • Ich stehe im Augenblick etwas auf Kriegsfuss mit der Tornado Dokumentation, sicher stet alles irgendwo, aber bis man dort ist wo geanu das steht was man sucht ist noch schwierig. Abgesehen von den vielen Tipfehlern in den Beispiel codes...

    Ich versuche eine primäre website in Tabs darzustellen (JQery ui). Das sieht auch schon ganz nett aus.

    Die primäre website lädt je nach ausgewähltem TAB eine sekundäre Seite nach. Das funktioniert auch soweit.

    Beim Laden der Sites wird im Browser eine Warnung geworfen, dass favicon.png nicht geladen werden kann.
    Dazu habe ich dann ein Tool verwendet um icons zu erzeugen und die Ergebnisse in der primären website eingebunden sowie die icons mit Zugemüse in einen Pfad static unter dem Projekt eingehängt.

    Favicon & App icon Generator

    Der Browser sollte nun Plattform abhängig das richtige Icon darstellen. Stattdessen wird im Browser nun eine Reihe von Fehlern erzeugt beim Versuch Icons in verschiedener Grösse vom Server anzufordern.


    Mir ist klar, dass die Anforderung an die Root url geht, habe nun versucht den webserver per StaticFileHandler dazu zu bewegen die icons (.png) aus dem Pfad static zu holen. Das gelingt aber nicht.

    Weiss jemand Rat, der mehr Erfahrung mit Tornado hat?

    Hier der Code des webservers:

    Softwarefehler suchen ist wie Pilze suchen. Wenn man erst einen gefunden hat, findet man meist mehrere.

    Bei Hardware ist es schlimmer, da findet man bereits Fehler wenn man gar keine sucht!

  • Also generell solltest du dir abgewöhnen deine Handler ihrer Funktion nach zu benennen. StoryHandler1, StoryHandler2 und StoryHandler3 ist verwirrend.

    Mit all dem anderen Kram in deinem Code können wir hier nichts anfangen - das macht es nur kompliziert da durch zu steigen bzw es zu verstehen... Kürze es also am besten auf nur das nötigste, zumal das auch helfen kann heraus zu finden woran es liegt

    Dann fällt mir auf das MainHandler nichts wirklich macht außer irgend einen Text zurück zu geben :s Die "get" Funktion wir automatisch jedes mal aufgerufen sobald ein GET HTTP request eintrifft und für die angegebene url passt...

    Normalerweise sollte es so sein dass " / " der Hauptpfad bzw URL ist. Hier sollte eine INDEX Datei geliefert werden, also eine index.html. Wie letztlich die Datei tatsächlich heißt spielt zwar keine Rolle aber um unnötiges Chaos zu vermeiden wäre es schon sinnvoll sich an ddieses standartisierte Schema zu halten.

    In der MainHandler sollte also das template bereitgestellt werden, in etwa so:

    Chrome requested die Datei aber nicht.

    Orientier dich einfach an meinem Code: Entwicklung: RoPi - Autonomer Roboter mit RaspberryPI
    der funktioniert super :cool:

  • aha, also du hast eine andere Dokumentation als ich, meine Beispiele sind aus:
    http://www.tornadoweb.org/en/stable/guide/structure.html

    Vielleicht verwende ich da ja etwas falsches oder bin einer falschen Spur gefolgt, aber wie schon mal gesagt, das ist mein erster Webserver, den ich in die Hand nehme.

    Mein Beispiel läuft momentan auf Windows mit Chrome als Browser. Wie im obigen Bild zu sehen ist wird aber tatsächlich .png angefordert

    Softwarefehler suchen ist wie Pilze suchen. Wenn man erst einen gefunden hat, findet man meist mehrere.

    Bei Hardware ist es schlimmer, da findet man bereits Fehler wenn man gar keine sucht!

    Einmal editiert, zuletzt von Wolfgang Glück (31. Januar 2016 um 20:23)

  • Mach einfach folgendes:

    In deine HTML Datei fügst du in den <head> folgendes ein:

    Code
    <link rel="icon" href="/static/favicon.ico" type="image/vnd.microsoft.icon">

    Und in das static Verzeichnis legst du deine favicon.ico ... Fertig.

    Du hattest ursprünglich auch eine Funktion StaticHandler für /static/ wenn ich mich richtig erinner, die verwende ich auch nur etwas abgewandelt:

    (nicht mehr W sondern I, also nicht mehr Warning sondern Info)

  • Hallo,

    Tipp: ignorier' die Meldung mit dem Fav-Icon und gehe das ganz zum Schluss an, wenn der Rest perfekt läuft. Das Fav-Icon ist für die korrekte Funktion des Codes irrelevant.

    In deinem Code sind die for-Schleifen im Abschnitt `# put data to body table` ein Python Anti-Pattern - iterier' direkt über das Element und spar' dir den Umweg über den Index-Zugriff. Wenn du nichts desto trotz eine Nummerierung brauchst (wie bei dir für die Nummerierung der ID), dann nutze `for counter, item in enumerate(iterable)`

    Und noch eine andere Frage, so rein Interesse halber: welches waren die Beweggründe, dass du dich für Tornando als Webframework entschieden hast?

    Gruß, noisefloor

  • noisefloor: Was spricht Gegen tornado? Man kann ca. 5 verschiedene Frameworks nutzen die alle ihre Vor- aber auch Nachteile haben... Letztlich sind aber die einzig sinnvollen: Tornado, Bottle, Flask, web2py oder Django.

    Django ist etwas zu überladen und daher komplizierter.
    Flask wird seit > 2 Jahren nicht mehr weiterentwickelt.
    Bottle hat ME kein WebSocket eingebaut.
    Tornado ist recht einfach zu handhaben und bietet alles was man brauch ;)

    Und ja ich weiß, Youtube, Google und ubuntuwiki nutzt Django und was eigenes... Und? Muss man deshalb das auch nutzen? Facebook nutzt Tornado... aber who cares ;)

  • naja die Datenversorgung in zwei Schleifen war das was mir als erstes dazu eingefallen ist und es hat sogar funktioniert. Das soll mal auf jqery umgestellt werden. Dazu muss ich aber das 6cm Buch erst mal lesen und verdauen

    Softwarefehler suchen ist wie Pilze suchen. Wenn man erst einen gefunden hat, findet man meist mehrere.

    Bei Hardware ist es schlimmer, da findet man bereits Fehler wenn man gar keine sucht!


  • keine ahnung wo du da nachschaust.

    auf den homepage's. latest Version: 0.10.1 => Dateidatum 14.06.2013

    für bottle gibts auch div. plugins

    ..man kann immer irgendwie alles möglich zusätzlich installieren.. der unterschied ist nur das bottle nicht von selbst websock mitbringt, das war kern meiner aussage.

  • So ich glaube ich muss mal bei Adam und Eva anfangen. Ich betrachte das ganze immer noch unter Windows nicht unter Linux.

    Ich habe nun den webserver umgestrickt und nur noch 2 handler
    MainHandler
    StaticHandler

    Das Rootverzeichnis für die html Dateien unter dem Projekt heisst Robbi/, da liegt jetzt die index.html und die abhängigem seiten wie Alarmlist.html...

    Das static Verzeichnis liegt auch unter dem Projekt und enthält die icons und die Folder js/ und css/


    wenn ich jetzt aus dem browser die url 192.168.1.200:8080/Robbi/index.html aufrufe bekomme ich den Fehler 404 für die index.html
    Die Handler werden nicht angesprochen
    hier der Code ohne den Mainhandler:

    ich müsste erst mal die Denke in die richtige Richtung gestellt bekommen, bevor ich hier weiterkomme
    Danke

    Softwarefehler suchen ist wie Pilze suchen. Wenn man erst einen gefunden hat, findet man meist mehrere.

    Bei Hardware ist es schlimmer, da findet man bereits Fehler wenn man gar keine sucht!

  • StaticHandler interessiert in diesem Fall nicht, sondern eigentlich wie deine MainHandler aussieht.

    StaticHandler behandelt nur Anfragen auf 192.168.1.200:8080/static/
    MainHandler behandelt nur Anfragen auf 192.168.1.200:8080/Robbi/

    Ich zeig dir mal meinen Code, vielleicht wirds dadurch verständlicher: http://codepad.org/XyrGvN60
    Meine Dateistruktur:

    Code
    web.py
    templates/index.html
    static/favicon.ico
    static/jquery-1.12.0.min.js
    static/jsmpg.js
    static/scripts.js
    static/style.css

    In meiner MainHandler kannst du Zeile 41 auskommentieren/löschen - damit ersetze ich in der index.html --> {{ test }}

  • Es läuft wieder wie vor dem Umbau, sogar das favicon wird richtig angefordert, führt aber zu einem Fehler 500

    Meine Bedientasten tun auch noch noch nicht was sie sollen, bzw. nur einmal


    Softwarefehler suchen ist wie Pilze suchen. Wenn man erst einen gefunden hat, findet man meist mehrere.

    Bei Hardware ist es schlimmer, da findet man bereits Fehler wenn man gar keine sucht!

  • Hallo,

    meigrafd:

    Zitat

    noisefloor: Was spricht Gegen tornado?


    Nichts! Da war wirklich aus reiner Neugier, weil ich außer dich niemanden "kenne", der auf Tornado setzt. Im deutschen Python-Forum kommen dazu z.B. auch nie Fragen.
    Und wenn man auf die Charakteristika und Stärken der Software schaut, dann ist Tornado ja auch nicht unbedingt das Webframework, was man so für den "hausgebrauch" auf jeden Fall braucht.

    Gruß, noisefloor

  • So, habe nun den StaticHandler noch erweitert um den Content-Type für png (habe doch auf png umgestellt und die Icons unter static/icons versorgt.

    Im Header der Seiten steht nun:
    <link rel="icon" href="/static/icons/favicon-16x16.png" type="image/png">

    Der StaticHandler sieht so aus:

    Ich bekomme trotz allem einen Fehler 500 beim Laden des icons.
    Es wird das richtige Icon gezogen, kann es sein dass das Icon zu gross ist (16x16)?
    Wo soll das denn angezeigt werden?

    Softwarefehler suchen ist wie Pilze suchen. Wenn man erst einen gefunden hat, findet man meist mehrere.

    Bei Hardware ist es schlimmer, da findet man bereits Fehler wenn man gar keine sucht!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!