如何将我的Flask网站正确部署到heroku?

时间:2020-03-25 07:46:01

标签: python flask heroku

我使用Flask后端创建了一个网站,在本地一切正常,但是当我尝试在heroku上部署它时,出现了这些错误>> 这是我的Procfile

web: gunicorn wsgi:app 

这是我的wsgi文件

from . import create_app
app = create_app()

这是我创建的应用代码>>

def create_app():

    app = Flask(__name__)

    if not os.getenv("DATABASE_URL"):
        raise RuntimeError("DATABASE_URL is not set")


    app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv("DATABASE_URL")
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

    db = SQLAlchemy()
    db.init_app(app)

    app.config['SECRET_KEY'] = os.getenv("SECRET_KEY")

    login_manager = LoginManager()
    login_manager.init_app(app)


    @login_manager.user_loader
    def load_user(user_id):
        return User.query.get(int(user_id))

    return app

这就是我从heroku日志中得到的

2020-03-25T07:37:09.102934+00:00 heroku[web.1]: State changed from starting to crashed
2020-03-25T07:37:08.996125+00:00 app[web.1]: Traceback (most recent call last):
2020-03-25T07:37:08.996155+00:00 app[web.1]:   File "/app/.heroku/python/bin/gunicorn", line 7, in <module>
2020-03-25T07:37:08.996318+00:00 app[web.1]:     from gunicorn.app.wsgiapp import run
2020-03-25T07:37:08.996337+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 9, in <module>
2020-03-25T07:37:08.996465+00:00 app[web.1]:     from gunicorn.app.base import Application
2020-03-25T07:37:08.996496+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/base.py", line 11, in <module>
2020-03-25T07:37:08.996623+00:00 app[web.1]:     from gunicorn import util
2020-03-25T07:37:08.996654+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/util.py", line 6, in <module>
2020-03-25T07:37:08.996775+00:00 app[web.1]:     import ctypes.util
2020-03-25T07:37:08.996798+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/ctypes/util.py", line 3, in <module>
2020-03-25T07:37:08.996912+00:00 app[web.1]:     import subprocess
2020-03-25T07:37:08.996934+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/subprocess.py", line 153, in <module>
2020-03-25T07:37:08.997239+00:00 app[web.1]:     import select
2020-03-25T07:37:08.997265+00:00 app[web.1]:   File "/app/select.py", line 3, in <module>
2020-03-25T07:37:08.997509+00:00 app[web.1]:     from flask import Flask,jsonify
2020-03-25T07:37:08.997541+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/flask/__init__.py", line 16, in <module>
2020-03-25T07:37:08.997670+00:00 app[web.1]:     from werkzeug.exceptions import abort
2020-03-25T07:37:08.997694+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/werkzeug/__init__.py", line 218, in <module>
2020-03-25T07:37:08.997974+00:00 app[web.1]:     from .serving import run_simple
2020-03-25T07:37:08.997999+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/werkzeug/serving.py", line 41, in <module>
2020-03-25T07:37:08.998139+00:00 app[web.1]:     import socket
2020-03-25T07:37:08.998163+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/socket.py", line 52, in <module>
2020-03-25T07:37:08.998310+00:00 app[web.1]:     import os, sys, io, selectors
2020-03-25T07:37:08.998334+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/selectors.py", line 290, in <module>
2020-03-25T07:37:08.998523+00:00 app[web.1]:     class SelectSelector(_BaseSelectorImpl):
2020-03-25T07:37:08.998547+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/selectors.py", line 317, in SelectSelector
2020-03-25T07:37:08.998734+00:00 app[web.1]:     _select = select.select
2020-03-25T07:37:08.998772+00:00 app[web.1]: AttributeError: module 'select' has no attribute 'select'
2020-03-25T07:37:09.084647+00:00 heroku[web.1]: Process exited with status 1



2020-03-25T07:39:11.077962+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=bookreviews101.herokuapp.com request_id=a08f3517-e1e7-439a-bd77-f676d217cc8b fwd="197.165.201.207" dyno= connect= service= status=503 bytes= protocol=https
2020-03-25T07:39:11.531655+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=bookreviews101.herokuapp.com request_id=27ee6d2f-2e85-4cb3-87dd-9856f84285e6 fwd="197.165.201.207" dyno= connect= service= status=503 bytes= protocol=https

我想知道此错误的原因以及解决方法

1 个答案:

答案 0 :(得分:0)

这是我的wsgi文件

from . import create_app
app = create_app()

这是我创建的应用程序代码

def create_app():
...

您的应用代码所在的文件叫什么文件。您的from . import create_app看起来不正确。可能没有导入该方法。

通常,您应该在app.py中写这样的东西:

app = Flask(__name__)
@app.route("/")
def exampleroot():
     return {'message': 'just an example'}

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=os.environ.get('PORT', 80))

您可以使用python3 app.py执行此操作。
您可以通过app.py通过gunicorn运行gunicorn app:app。 ({__name__ == "__main__"将返回False。)