【问题标题】:Deploying Flask app to heroku causes 500 error at create_app() [duplicate]将 Flask 应用程序部署到 heroku 会导致 create_app() 出现 500 错误 [重复]
【发布时间】:2019-12-13 01:59:40
【问题描述】:

我正在尝试使用“Flask run”将应用程序部署到在我的本地计算机上运行良好的 heroku。我的应用程序的结构类似于带有蓝图的微博烧瓶教程。当我部署它然后尝试访问该网站时,我收到此错误:

TypeError: create_app() takes from 0 to 1 positional arguments but 2 were given

这是我的 __init__.py 文件:

db = SQLAlchemy()
migrate = Migrate()
login = LoginManager()
login.login_view = 'auth.login'
login.login_message = 'Please log in to access this page.'
bootstrap = Bootstrap()    
uploadFolder = os.path.dirname(__file__) + '/uploads/companies'


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

db.init_app(app)
migrate.init_app(app, db)
login.init_app(app)
bootstrap.init_app(app)

from app.errors import bp as errors_bp
app.register_blueprint(errors_bp)
from app.auth import bp as auth_bp
app.register_blueprint(auth_bp, url_prefix="/auth")
from app.main import bp as main_bp
app.register_blueprint(main_bp, url_prefix="/")


if not app.debug and not app.testing:
    if not os.path.exists('logs'):
        os.mkdir('logs')
    file_handler = RotatingFileHandler('logs/StructuredSafety.log', maxBytes=10240,
                                        backupCount=10)
    file_handler.setFormatter(logging.Formatter(
        '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
    file_handler.setLevel(logging.INFO)
    app.logger.addHandler(file_handler)

    app.logger.setLevel(logging.INFO)
    app.logger.info('Structured Safety startup')

return app

from app import models

我的 app.py 文件是:

from app import create_app as application
from app import db
from app.models import User

app = application

我的 Procfile 看起来像这样:

web: flask db upgrade; gunicorn StructuredSafety:app

我一直在努力在网上寻找有关此问题的资源。我知道我的 app.py 文件正在调用 create_app,但我没有在其中传递任何内容,所以我很好奇 create_app 实际是从哪里调用的,以及为什么它会接收到许多参数。

【问题讨论】:

    标签: python heroku flask


    【解决方案1】:

    您需要调用 create_app 来获取 Gunicorn 将服务的应用程序。

    app.py 做:

    from app import create_app
    app = create_app()
    

    然后将您的 Procfile 更改为:

    web: flask db upgrade; gunicorn app:app
    

    【讨论】:

    • 所以这有点奏效。而不是从“StructuredSafety”导入应用程序,它应该只是“从应用程序导入应用程序”,因为我的应用程序文件夹名为 app,而不是 StructuredSafety。谢谢您的帮助!关于为什么会起作用的任何解释?
    • 我关于“结构化安全”的错误。而且我不太确定为什么这有效,不过,我遇到了和你一样的问题,这就是最终为我工作的原因。
    猜你喜欢
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2020-08-28
    • 2020-05-24
    • 2018-04-07
    • 2020-10-21
    相关资源
    最近更新 更多