【问题标题】:WSGI application raised an exceptionWSGI 应用程序引发异常
【发布时间】:2016-12-22 18:58:18
【问题描述】:

我在服务器中运行烧瓶应用程序代码时遇到 wsgi 异常。

这是我的 manage.py

from app import app1, db
from flask_script import Manager, Shell

from flask_migrate import Migrate, MigrateCommand
migrate = Migrate(app1, db)

manager = Manager(app1)
manager.add_command('db', MigrateCommand)


def make_shell_context():
    return dict(app=app1, db=db)

manager.add_command("shell", Shell(make_context=make_shell_context))

if __name__ == '__main__':

    manager.run()

和 app.py

app1 = Flask(__name__)
app1.config.from_object(config['default'])

rest_api = Api(app1)

db = SQLAlchemy(app1)

bcrypt = Bcrypt(app1)

from app import routes

Compress(app1)
assets = Environment(app1)
define_assets(assets)
cache = Cache(app1,config={'CACHE_TYPE': 'simple'})

在我的本地,没有错误。我使用这个python manage.py runserver 命令运行我的应用程序。

现在,在服务器中,我成功地完成了这些步骤python manage.py db init、python manage.py db migrate、python manage.py db upgrade,并成功创建、更新了数据库。我已经安装了passenger 来为应用程序提供服务。

我的passenger_wsgi.py 看起来像这样

from manage import  manager as application

现在,当我运行 passenger start --port 3003 -a '0.0.0.0' 时,它会抛出这个错误

[ 2016-08-16 07:44:15.0758 30180/7f90226f8700 age/Cor/Con/InternalUtils.cpp:112 ]: [Client 2-1] Sending 502 response: application did not send a complete response
App 30251 stderr: Traceback (most recent call last):
App 30251 stderr:   File "/usr/share/passenger/helper-scripts/wsgi-loader.py", line 163, in main_loop
App 30251 stderr:     socket_hijacked = self.process_request(env, input_stream, client)
App 30251 stderr:   File "/usr/share/passenger/helper-scripts/wsgi-loader.py", line 297, in process_request
App 30251 stderr:     result = self.app(env, start_response)
App 30251 stderr: TypeError: __call__() takes at most 2 arguments (3 given)

【问题讨论】:

  • manager 不是您的应用程序app1 在app.py 中。管理器仅用于在您的开发环境中管理它。

标签: python python-2.7 flask passenger flask-sqlalchemy


【解决方案1】:

将 Flask 应用程序导入为要运行的应用程序,而不是 Flask-Script 管理器。

from app import app1 as application

Flask-Script 管理器用于在命令行上运行命令。它不是一个 WSGI 应用程序。你仍然可以使用它来运行其他命令,但是 WSGI 服务器需要 Flask 应用程序。

【讨论】:

    猜你喜欢
    • 2016-01-04
    • 2016-11-13
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    相关资源
    最近更新 更多