我正在嘗試將一個 dockerized 燒瓶應用程式部署到 Heroku 中。
每次部署時,我都會不斷收到“另一個程式正在使用的埠”。我不知道如何解決這個問題。請問有人可以幫忙嗎?
碼頭工人檔案
FROM python:3.8-slim-buster
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Pacific/Auckland
RUN echo $TZ > /etc/timezone && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
WORKDIR /app
COPY ./requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
ENTRYPOINT ["python3"]
CMD ["myapp.py"]
我的應用程式.py
import os
import requests
import json
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/')
def parse_data():
bla bla
return result
port = int(os.environ.get("PORT", 5000))
app.run(host='0.0.0.0', port=port, debug=True)
檔案
web: gunicorn myapp:app
來自 Heroku 的日志
2022-06-04T11:33:05.715431 00:00 app[web.1]: [2022-06-04 11:33:05 0000] [1560] [INFO] Booting worker with pid: 1560
2022-06-04T11:33:05.721157 00:00 app[web.1]: * Serving Flask app 'myapp' (lazy loading)
2022-06-04T11:33:05.721175 00:00 app[web.1]: * Environment: production
2022-06-04T11:33:05.721202 00:00 app[web.1]: WARNING: This is a development server. Do not use it in a production deployment.
2022-06-04T11:33:05.721219 00:00 app[web.1]: Use a production WSGI server instead.
2022-06-04T11:33:05.721232 00:00 app[web.1]: * Debug mode: on
2022-06-04T11:33:05.724607 00:00 app[web.1]: Address already in use
2022-06-04T11:33:05.724627 00:00 app[web.1]: Port 4050 is in use by another program. Either identify and stop that program, or start the server with a different port.
2022-06-04T11:33:05.724800 00:00 app[web.1]: [2022-06-04 11:33:05 0000] [1559] [INFO] Worker exiting (pid: 1559)
該網頁從
uj5u.com熱心網友回復:
嘗試從應用程式中洗掉此行:
app.run(host='0.0.0.0', port=port, debug=True)
或將其放在通常的if塊中,以確保它僅在使用python可執行檔案而不是啟動時運行開發服務器gunicorn:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=port, debug=True)
你剛才定位的方式,看起來heroku正在gunicorn(正確地)啟動服務器,但隨后開發服務器啟動app.run,這會導致“使用中的埠錯誤”。
明顯的跡象是您在日志中看到通常的開發服務器警告,盡管Procfile(再次正確)使用gunicorn.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/485650.html
下一篇:在燒瓶規則中處理url
