2017-11-20 8 views
-1

Pythonプログラミング言語を使用したマイクロフレームワークFlaskを使用してREST APIを作成しています。デバッグモードでは、アプリケーションはソースコードの変更を検出し、同じホストとポートを使用して再起動します。プロダクションモード(デバッグなし)では、ソースコードを変更するとアプリケーションが自己を再起動しないため、自分でアプリケーションを再起動する必要があります。この場合の問題は、以前のバージョンのアプリケーションで以前に使用されていたポートを使用してアプリケーションを実行できないことです。したがって、すべてのアプリケーション更新でポートを変更するように求められます。Python /フラスコアプリケーションのポート管理

これは私のコードの外観です。

from flask import Flask, jsonify, request 
import json 
import os 

app = Flask(__name__) 


@app.route('/method1', methods=['GET']) 
def method1(): 
    return jsonify({"result":"true"}) 

@app.route('/method2', methods=['GET']) 
def method2(): 
    return jsonify({"result":"true"}) 


if __name__ == '__main__': 
    app.run(debug=True,port=15000) 

この問題を解決するにはどうすればよいですか?またはアプリケーションのアップデートごとにポートを変更する必要がありますか?

+0

問題を再現できません。 productinoでアプリを再起動すると、ポートを再利用できます。 [編集]に[mcve]を含めるようにしてください。また、本番環境ではdevサーバを使用しないでください。 – davidism

+0

アプリを再実行しますが、決して使用することはできません。 HTTPリクエストとアプリケーションを送信しようとすると応答しません –

+0

おそらく、GunicornのようなHTTPサーバを稼動しているでしょう。同じポートで何が実行されているかを見てください( 'lsof -i TCP:15000'コマンドを使うことができます.Gunicornを使用していなくても、特定のポートを使ってインスタンスのPIDを得ることができます)。それでもやり直す前にそれを殺すべきです。 Gunicornにはファイルの変更時に再起動するオプションがありますが、私は運用環境ではお勧めしません。 –

答えて

2

.run()引数に指定されていますtest.pyは、ポートを変更しません。このコード:

from flask import Flask  

app = Flask(__name__) 

@app.route("/") 
def index(): 
    return "123" 

app.run(host="0.0.0.0", port=8080) # or host=127.0.0.1, depends on your needs 

あなたはrun機能で目的のポートを指定した場合、許可された範囲内の別のTCPポートにバインドするフラスコを強制することは何もありません。このポートが既に別のアプリで使用されている場合は、起動後に OSError: [Errno 98] Address already in useと表示されます。あなたはフラスコを8080ポートたびにバインドされます見ることができるように

[email protected]:~/Development/$ python test.py 
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit) 
^[email protected]:~/Development$ python test.py 
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit) 
^[email protected]:~/Development/$ python test.py 
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit) 
^[email protected]:~/Development/$ python test.py 
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit) 
127.0.0.1 - - [20/Nov/2017 17:04:56] "GET/HTTP/1.1" 200 - 

UPD:私はpython test.pyコマンドを使用して、このコードのいくつかの時間を実行する場合、これは私のPCから出力されます。

UPD2:あなたはあなたのサービスのセットアップ生産ENV意志 - あなたはフラスココードでポートの世話をする必要はありません - あなただけで動作するWebサーバの設定で任意のポートを指定する必要がありますあなたのスクリプトはwsgi layerです。

+0

それは私のコードとほとんど同じですが、何が違いを生むことができますか? –

+0

はい、違いはありません。たとえば、このコードを 'python main.py'を使って実行すると、このコードを実行するたびに8080 TCPポートにバインドされるからです。フラスコが別のポート(許容範囲内)にバインドするように強制することができるものはありません –

+0

どのように問題を解決するには? –

関連する問題