Python 如何正确部署我的flask应用程序?

Python 如何正确部署我的flask应用程序?,python,heroku,flask,Python,Heroku,Flask,我原来的应用程序是这样的(这里不需要以前的路线): python文件本身被称为app.py现在要在heroku上部署我的应用程序,我添加了一个文件Procfile文件,其中包含以下句子:web:gunicorn app:app 并在以前共享的代码行中添加了以下内容: app = Flask(__name__) @app.route('/') #if __name__ == "__main__" : def index(): parser = argparse.ArgumentParse

我原来的应用程序是这样的(这里不需要以前的路线):

python文件本身被称为
app.py
现在要在heroku上部署我的应用程序,我添加了一个文件
Procfile
文件,其中包含以下句子:
web:gunicorn app:app

并在以前共享的代码行中添加了以下内容:

app = Flask(__name__)

@app.route('/')
#if __name__ == "__main__" :
def index():
    parser = argparse.ArgumentParser()
    parser.add_argument('dir', type=str, help='specify the images directory')
我在网页上看到的错误是:

Application error
An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details.
调试显示:

2018-07-11T12:03:06.041871+00:00 app[web.1]: [2018-07-11 12:03:06 +0000] [9] [ERROR] Exception in worker process
2018-07-11T12:03:06.035624+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
2018-07-11T12:03:06.035631+00:00 app[web.1]: if __name__ == "__main__" :
2018-07-11T12:03:06.035639+00:00 app[web.1]: SyntaxError: invalid syntax
2018-07-11T12:03:06.041875+00:00 app[web.1]: Traceback (most recent call last):
2018-07-11T12:03:06.041877+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2018-07-11T12:03:06.041879+00:00 app[web.1]: worker.init_process()
2018-07-11T12:03:06.041881+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 129, in init_process
2018-07-11T12:03:06.041882+00:00 app[web.1]: self.load_wsgi()
2018-07-11T12:03:06.041884+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
2018-07-11T12:03:06.041885+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2018-07-11T12:03:06.041887+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
2018-07-11T12:03:06.041889+00:00 app[web.1]: self.callable = self.load()
2018-07-11T12:03:06.041892+00:00 app[web.1]: return self.load_wsgiapp()
2018-07-11T12:03:06.041894+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
2018-07-11T12:03:06.041890+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
2018-07-11T12:03:06.041895+00:00 app[web.1]: return util.import_app(self.app_uri)
2018-07-11T12:03:06.041897+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 350, in import_app
2018-07-11T12:03:06.041898+00:00 app[web.1]: __import__(module)
2018-07-11T12:03:06.041900+00:00 app[web.1]: File "/app/app.py", line 121
2018-07-11T12:03:06.041901+00:00 app[web.1]: if __name__ == "__main__" :
2018-07-11T12:03:06.041903+00:00 app[web.1]: ^
2018-07-11T12:03:06.041910+00:00 app[web.1]: SyntaxError: invalid syntax
2018-07-11T12:03:06.042123+00:00 app[web.1]: [2018-07-11 12:03:06 +0000] [9] [INFO] Worker exiting (pid: 9)
2018-07-11T12:03:06.201688+00:00 app[web.1]: [2018-07-11 12:03:06 +0000] [4] [INFO] Shutting down: Master
2018-07-11T12:03:06.202039+00:00 app[web.1]: [2018-07-11 12:03:06 +0000] [4] [INFO] Reason: Worker failed to boot.
2018-07-11T12:03:06.328723+00:00 heroku[web.1]: Process exited with status 3
其中最重要的一行是
原因:Worker无法启动
,这让我觉得我没有正确启动应用程序。有人能引导我去那里吗(它指向以if开头的那行,但它对我来说没有意义,因为它被注释了)


即使在完全删除包含if的行并按下后,我仍然会得到一个与之相关的错误。

检查此样板文件是否可以帮助您

import argparse
from flask import Flask


def create_app(config=None):
    app = Flask(__name__)

    app.config.update(dict(DEBUG=True))
    app.config.update(config or {})

    # Definition of the routes. Put them into their own file. See also
    # Flask Blueprints: http://flask.pocoo.org/docs/latest/blueprints
    @app.route("/")
    def hello_world():
        return "Hello World"

    return app


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('dir', type=str, help='specify the images directory')
    parser.add_argument("-p", "--port", action="store", default="8000")

    args = parser.parse_args()
    port = int(args.port)
    app = create_app()
    app.run(host="0.0.0.0", port=port)

运行app.run的位置?app.run是什么意思?app.py?初始化flask应用程序(
app=flask(\uuu name\uuu)
)。现在我的问题是,您在哪里添加了启动flask Apphave的
app.run()
命令?实际上,我所遵循的教程没有该步骤
import argparse
from flask import Flask


def create_app(config=None):
    app = Flask(__name__)

    app.config.update(dict(DEBUG=True))
    app.config.update(config or {})

    # Definition of the routes. Put them into their own file. See also
    # Flask Blueprints: http://flask.pocoo.org/docs/latest/blueprints
    @app.route("/")
    def hello_world():
        return "Hello World"

    return app


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('dir', type=str, help='specify the images directory')
    parser.add_argument("-p", "--port", action="store", default="8000")

    args = parser.parse_args()
    port = int(args.port)
    app = create_app()
    app.run(host="0.0.0.0", port=port)