2017-09-05 1 views
6

Ich habe die Online-Dokumentation für die Installation eines gefolgt.Flask + Tornado-Anwendung - wie mit Server kommunizieren (Verbindung verweigert)

Ich habe es geschafft, die REST-Server-Anwendung auf meinem Server-Rechner laufen zu lassen. According to the documentation sollten folgende Endpunkte von meinem Server verfügbar sein:

List all patients (http://localhost:5000/Patient) 
Show info for patient id #1 (http://localhost:5000/Patient/1) 
List all patients with ana in name (http://localhost:5000/Patient?name=ana) 

# etc ... 

Dies ist der Python-Code, der den Tornado-Server starten verwendet wird:

from tornado.wsgi import WSGIContainer 
from tornado.httpserver import HTTPServer 
from tornado.ioloop import IOLoop 
from tornado.options import define, options 
from app import create_app 
from config import ProductionConfig 

define("port", default=5000, help="Port to listen on", type=int) 
#app = create_app(config=ProductionConfig) 
app = create_app() #DebugConfig 
http_server = HTTPServer(WSGIContainer(app)) 
http_server.listen(options.port) 
IOLoop.instance().start() 

ich curl den Server abzufragen, um zu versuchen, verwendet:

curl http://localhost:5000/Patient 
curl: (7) Failed to connect to localhost port 5000: Connection refused 

Hinweis: ich vermute ich (aus dem obigen Code eingefügt), dass der Tornado-Server hört Port 5000 ab. Ich habe den Code geändert, um den Wert von `options.port auszudrucken, aber aus irgendeinem Grund wird er nicht auf die Konsole gedruckt. es ist auch nicht gelungen, den Wert einer Datei zu protokollieren (Datei nicht geschrieben und keine Fehlermeldung angegeben) - also nicht sicher, was los ist.

Ich doppelt mit lsof überprüft, um zu sehen, welche Ports offen sind:

$ lsof -i 
COMMAND PID  USER FD TYPE DEVICE SIZE/OFF NODE NAME 
python2 23147 morpheous 4u IPv6 592698  0t0 TCP localhost:51950->localhost:8000 (ESTABLISHED) 

ich Hilfe bei der Einrichtung müssen die Port Tornado läuft, so kann ich curl die REST-API abfragen.

+0

Dieser Code sieht korrekt aus, und es funktioniert, wenn ich meine eigene create_app-Funktion ersetze. Das Problem muss etwas in den 'app'- oder' config'-Modulen sein. –

+0

@BenDarnell an welchem ​​Port lief Ihre Tornado-Instanz? Außerdem wollte ich in meiner Frage wissen, wie man mit dem Server "curl" spricht - wie würde ich das machen? –

+0

Weißt du auch, wie ich den Tornado-Anwendungscode debuggen kann (Code in meiner Frage). Die Möglichkeit, Variablen nicht in der Konsole zu drucken oder zu protokollieren, erschwert das Debuggen und Beheben des Problems. –

Antwort

0

Verbindung verweigert wird, wenn entweder Berechtigungsproblem oder nichts auf diesem Port ausgeführt wird. In Ihrem Fall denke ich dort nichts auf 5000.

läuft bitte mit diesem Befehl überprüfen

ss -ltp

Sie können sudo verwenden, um alle TCP-Verbindungen Liste mit Port und Benutzer

(ex) sudo ss -ltp

Meine Ausgabe:

LISTEN 0 128 *: 6.379 : Benutzer: (("redis-Server", pid = 12325, fd = 5))

Anmerkung: Ich meine einen Ausgang nur aufgelistet meiner Liste hier.

Das sagt mir nur redis läuft auf 6379 port.

Wenn im Fall Tornado läuft, wird es für Sie auflisten, während dieser Befehl ausgelöst wird.

Lassen Sie mich wissen, wenn irgendein Problem Sie in diesem stehen.

Verwandte Themen