2017-09-05 63 views
6

Podążyłem za dokumentacją online, aby zainstalować GNU health FHIR REST server.Aplikacja Flask + Tornado - jak komunikować się z serwerem (odmowa połączenia)

Udało mi się uruchomić aplikację serwera REST na moim komputerze serwera. According to the documentation następujące punkty końcowe powinny być dostępne od mojego serwera:

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 ... 

Jest to kod Pythona, który jest używany do uruchomienia serwera Tornado:

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

użyłem curl próbować przesłuchać serwer:

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

Uwaga: Zgaduję (z kodu wklejony powyżej), że serwer Tornado nasłuchuje na porcie 5000. Zmodyfikowałem kod, aby wydrukować wartość `options.port, ale z jakiegoś powodu nie jest on drukowany na konsoli; również nie udało się zarejestrować wartości w pliku (plik nie został zapisany i nie podano komunikatu o błędzie) - więc nie wiem, co się dzieje.

I podwójne sprawdzane lsof aby zobaczyć, które porty są otwarte:

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

Potrzebuję pomocy w nawiązywaniu który jest uruchomiony portu Tornado, więc mogę użyć curl do kwerendy API REST.

+0

Ten kod wygląda poprawnie i działa, jeśli podstawię moją własną funkcję 'create_app'. Problem musi być czymś w modułach 'app' lub' config'. –

+0

@BenDarnell, który port był uruchomioną instancją Tornado? Ponadto, w moim pytaniu, chciałem wiedzieć, jak rozmawiać z serwerem za pomocą 'curl' - jak bym to zrobił? –

+0

Czy wiesz, w jaki sposób mogę zdebugować kod aplikacji tornado (kod podany w pytaniu). Brak możliwości drukowania na konsoli lub rejestrowania zmiennych w pliku utrudnia debugowanie i rozwiązywanie problemu. –

Odpowiedz

0

Odmowa połączenia zostanie nawiązana, jeśli wystąpi problem z uprawnieniami lub nic nie działa na tym porcie. W twoim przypadku chyba nie ma nic działa na 5000.

proszę skontaktować się z tym poleceniem

ss -ltp

Być może trzeba będzie użyć sudo do listy wszystkich połączeń TCP z portu i użytkownik

(ex) sudo ss -ltp

Moja wyjściowa:

POSŁUCHAJ 0 128 *: 6379 : użytkownicy (("Redis-server", pid = 12325, fd = 5))

Uwaga: Właśnie wymienione moje jedno wyjście z mojej listy tutaj.

To tylko mówi mi, że Redis działa na porcie 6379.

Jeśli w razie działania tornada, wyświetli to dla ciebie podczas odpalania tego polecenia.

Daj mi znać, jeśli masz jakiekolwiek problemy z tym związane.