【问题标题】:Cannot deploy flask app on Passenger running in centos7无法在 centos7 中运行的乘客上部署烧瓶应用程序
【发布时间】:2019-01-17 11:25:52
【问题描述】:

我正在尝试使用 Phusion 的Passenger 和Nginx 在centos7 上部署flask 应用程序。我可以在服务器上的烧瓶中运行我的应用程序,但我无法访问该应用程序。 我已按照phusion guide中的所有步骤进行操作

Flask应用创建如下:

import os

from flask import Flask, send_from_directory


def create_app(test_config=None):
    app = Flask(__name__, instance_relative_config=True)
    DATABASE_FILE = os.path.join(app.instance_path, "myapp.sqlite")

    app.config.from_mapping(
        SECRET_KEY="key",
        SQLALCHEMY_DATABASE_URI='mysql+mysqldb://user:password@localhost:3306/db',
        SQLALCHEMY_TRACK_MODIFICATIONS=False,
        FLASK_ADMIN_SWATCH= 'cerulean',
    )

    if test_config is None:
        app.config.from_pyfile("config.py", silent=True)
    else:
        app.config.from_mapping(test_config)

    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    @app.route("/favicon.ico")
    def favicon():
        return send_from_directory(
            os.path.join(app.root_path, "static/favicon"),
            "favicon.ico",
            mimetype="image/vnd.microsoft.icon",
        )

    from myapp.model.auth_model import db
    db.init_app(app)

    from myapp.controller import session
    session.init_app(app)

    from myapp.view import auth
    app.register_blueprint(auth.bp)
    from myapp.view import module1
    app.register_blueprint(module1.bp)
    app.add_url_rule("/", endpoint="index")
    from myapp.view import api
    app.register_blueprint(api.bp)

    return app

至于Passenger WSGI文件(passenger_wsgi.py),我没有更好的主意,我只是将这段代码放在应用程序文件夹中:

import myapp
application = myapp.create_app()

nginxerror.log显示如下

App 5979 output:   File "/usr/share/passenger/helper-scripts/wsgi-loader.py", line 333, in process_request
App 5979 output:     result = self.app(env, start_response)
App 5979 output: TypeError: 'module' object is not callable

求助!!!!!!

【问题讨论】:

    标签: nginx flask passenger centos7


    【解决方案1】:

    我成功部署了应用程序。 我必须做三件事:

    1. 从应用工厂正确返回应用
    2. 将passenger_wsgi.py文件放到app/code文件夹中
    3. 确保调用了正确版本的python

    应用工厂现在是这个...

        ...
    
        from myapp.view import auth
        app.register_blueprint(auth.bp)
        from myapp.view import module1
        app.register_blueprint(module1.bp)
        app.add_url_rule("/", endpoint="index")
        from myapp.view import api
        app.register_blueprint(api.bp)
    
        return app
    if __name__ == "__main__":
        app = create_app()
        app.run()
    

    /var/www/app_name/code/passenger_wsgi.py文件如下

    from nwpapp import create_app
    application = create_app()
    

    我没有使用虚拟环境。默认情况下,python2.7 被调用。我必须设置替代方案并将 python3.6 设为默认值。确保运行正确的 pip 版本来安装依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      相关资源
      最近更新 更多