[英]Flask app works locally, but not on Heroku (Method not allowed)
[英]Dockerized Flask App / Crashing on Heroku while locally running image works fine
在本地构建和运行 docker 映像时,flask 应用程序成功启动,一切正常。
但是,当部署到Heroku时,应用程序崩溃并立即存在。
Dockerfile
FROM python:3.9.4
ADD . /blockchain-py
WORKDIR /blockchain-py
RUN pip3 install -r requirements.txt
EXPOSE 5000
ENTRYPOINT [ "python3" ]
CMD ["server.py"]
heroku.yml
build:
docker:
web: Dockerfile
我也尝试添加Procfile (无济于事)
web: gunicorn --bind 0.0.0.0:${PORT} wsgi server:app --log-file=-
来自 heroku 日志的错误消息:
2021-05-27T08:01:39.206659+00:00 heroku[web.1]: State changed from crashed to starting
2021-05-27T08:01:55.599292+00:00 heroku[web.1]: Starting process with command `python3`
2021-05-27T08:01:58.310259+00:00 heroku[web.1]: Process exited with status 0
2021-05-27T08:01:58.390600+00:00 heroku[web.1]: State changed from starting to crashed
2021-05-27T08:01:58.409515+00:00 heroku[web.1]: State changed from crashed to starting
2021-05-27T08:02:18.130426+00:00 heroku[web.1]: Starting process with command `python3`
2021-05-27T08:02:21.371471+00:00 heroku[web.1]: Process exited with status 0
2021-05-27T08:02:21.466571+00:00 heroku[web.1]: State changed from starting to crashed
2021-05-27T08:02:23.139469+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=blockchain-server-py.herokuapp.com request_id=69be5144-0665-4bc6-8616-e15b34ea370f fwd="95.91.235.135" dyno= connect= service= status=503 bytes= protocol=https
2021-05-27T08:02:23.845517+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=blockchain-server-py.herokuapp.com request_id=7262f8a8-264a-47cb-9cfa-f67d27ee4470 fwd="95.91.235.135" dyno= connect= service= status=503 bytes= protocol=https
服务器.py
import os
from typing import Dict, Union
from server.response import Response
from blockchain import *
from flask import Flask, request, send_from_directory
from flask_cors import CORS
from server.responseHelpers import get_message, get_missing_fields, get_serializable_block, get_serializable_transaction, has_all_required_fields, jsonify_chain
from server.models.statusCodes import HttpStatusCodes
from server.requestHelpers import get_param
from core.blockchainFactory import BlockchainFileStorageFactory
app = Flask(__name__)
CORS(app)
blockchain = Blockchain(BlockchainFileStorageFactory)
host = '0.0.0.0'
port = int(os.environ.get('PORT', 5000))
@app.route('/', methods=[HttpStatusCodes.GET])
def get_ui():
return send_from_directory('ui/templates', 'node.html')
# ... some more routes
print('Starting Server...')
if __name__ == '__main__':
app.run(host, port, debug=True)
访问环境变量时使用大写( PORT
)
port = int(os.environ.get("PORT", 5000))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.