python
  • curl
  • heroku
  • 2017-06-12 1 views 0 likes 
    0

    Der Python erfolgreich gestartet und die Heroku App wird in "lauscht auf Port 5000" fest, wie es soll diese server.py:Heroku Fehler, wenn sein Python-Instanz verbinden: "Connection refused"

    (...) 
    parser.add_argument('-p', '--port', type=int, default=5000, help='port number') 
    parser.add_argument('--debug', action='store_true', help='enable debug mode') 
    args = parser.parse_args() 
    
    if args.debug: 
        app.debug = True 
    
    app.run(host='0.0.0.0') 
    

    Dies funktioniert und zeigt die App wie erwartet gestartet. Die App in Heroku bleibt in „Running on http://0.0.0.0:33507/ (Press CTRL+C to quit)

    Wenn jedoch wie diese curl -X POST https://APPNAME.herokuapp.com/search -H "Content-Type: application/json" -d '{ "text": "some_text"}' die Anwendung eine Locke zu meiner Heroku app tun stoppt indefinetly

    Und wenn curl -X POST https://APPNAME.herokuapp.com:5000/search -H "Content-Type: application/json" -d '{ "text": "some_text"}' (Ankündigung habe ich den Port in der URL) zu tun ich

    (7) konnte nicht APPNAME.herokuapp.com Port 5000 verbinden: Verbindung

    gleiche, wenn der Port alsflag übergeben wird verweigert.

    Weiß jemand genau, warum das passiert?

    Vielen Dank

    Antwort

    0

    Beachten Sie, dass der Port Ihre Anwendung nicht die gleiche wie die Port Heroku aussetzt im Internet für Sie ist bindet. Heroku hört auf http (Port 80) und https (Port 443) für Sie. Daher sollte der Befehl curl den Port von der URL weglassen.

    Herokus Routing-Layer fungiert als Proxy für Ihre Anwendung, die den über die Umgebungsvariable $PORT bereitgestellten Port binden soll. Sie können jedoch keine direkte Verbindung zu diesem Port herstellen (Sie können sich über ein anderes Protokoll als HTTP nicht mit Ihrer Anwendung verbinden).

    Darüber hinaus gibt es einen kleinen Fehler in dem Code, den Sie geschrieben - server.py akzeptiert einen --port Parameter, aber Sie geben es nicht auf die run() Methode. Sie müssen es in app.run(host='0.0.0.0', port=args.port) ändern. Stellen Sie außerdem sicher, dass der Procfile Web-Prozess als web: python server.py --port $PORT definiert ist, sodass Sie an den Port binden, den Heroku erwartet (der nicht garantiert Port 5000 sein).

    Hoffe, dass hilft.

    Verwandte Themen