【问题标题】:how to use flask_migrate in my gunicorn+flask proj如何在我的 gunicorn+flask 项目中使用烧瓶迁移
【发布时间】:2020-07-08 02:58:10
【问题描述】:

我有一个使用flask+gunicorn+MySQL的项目,目录是这样的:

├── Pipfile
├── Pipfile.lock
├── README.md
├── __init__.py
├── app
│   ├── __init__.py
│   ├── login.py
│   ├── system.py
│   ├── model.py
│   ├── task.py
│   └── view.py
├── config.py
├── gunicorn.conf
├── requirements.txt
├── tests
│   └── testurl.py
└── wsgi.py

app/init.py中有一个函数工厂,像这样:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

def create_app(conf):

    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = DATA_BASE_PATH
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    db.init_app(app=app)
    with app.app_context():
        db.create_all()

    app.register_blueprint(blueprint=view, url_prefix='/view/')

    socketio.init_app(app, async_mode=None)
    login_init(app)

    return app


在文件 wsgi.py 中,我有:

from app import create_app
from config import app_conf
from app import socketio

app = create_app(app_conf)

if __name__ == "__main__":
    socketio.run(app=app, host=host, use_reloader=False)
    

如果我想运行这个 porj,我使用:

gunicorn -c gunicorn.conf wsgi:app

现在我想使用 flask-migrate 自动更新 MySQL 表更改,但我想知道我应该在哪里初始化 migrate?我曾尝试在 wsgi.py 或 app/init.py 中执行此操作,但都不起作用... 请帮我一把,先谢谢了。

【问题讨论】:

    标签: python flask gunicorn migrate


    【解决方案1】:

    您应该在 app/init.py 文件中初始化 Flask Migrate,例如:

    from flask_migrate import Migrate
    migrate = Migrate()
    
    def create_app() 
        migrate.init_app(app)  
        # your original code here
    

    然后要运行迁移,您可以在 cmd shell 中运行 flask db migrate

    【讨论】:

    • 确实如你所说,它说:` * 提示:存在 .env 或 .flaskenv 文件。执行“pip install python-dotenv”来使用它们。用法:flask db migrate [OPTIONS] 错误:导入“application.app”时,引发了 ImportError:Traceback(最后一次调用):文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3. 6/site-packages/flask/cli.py”,第 240 行,在 locate_app import__(module_name) 文件“/Users/lbj/work/gitlab/far/application/app/__init.py”中,第 9 行,在 中从 app.task 导入任务 ModuleNotFoundError: No module named 'app'` when I run
    • 是的,您需要安装 python-dotenv 以利用您的 .env 或 .flaskenv 文件(这些文件将具有正确执行烧瓶数据库迁移的环境信息)。例如,您需要在 .env 中传递正确的数据库连接 URL 和数据库名称。
    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 2019-01-26
    • 2018-09-12
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多