Python 使用manage.py(flask脚本)运行多个不同的flask应用程序

Python 使用manage.py(flask脚本)运行多个不同的flask应用程序,python,flask,flask-script,Python,Flask,Flask Script,我设置了一个Flask应用程序,它可以运行两个不同的站点(这些站点共享业务逻辑和数据库模型,因此它们使用相同的后端)。一个是常规网站,另一个是运行任务的网站(它是一个将长时间运行的任务拍摄到芹菜中的web界面) 该应用程序目前使用Flask脚本(manage.py命令)启动常规网站,但我也希望使用相同的脚本启动任务网站 在Flask脚本中,似乎所有命令都是在单个应用程序上运行的进程。是否可以让manage.py启动两个不同的应用程序 我的代码如下所示,create_app是为网站创建Flask

我设置了一个Flask应用程序,它可以运行两个不同的站点(这些站点共享业务逻辑和数据库模型,因此它们使用相同的后端)。一个是常规网站,另一个是运行任务的网站(它是一个将长时间运行的任务拍摄到芹菜中的web界面)

该应用程序目前使用Flask脚本(manage.py命令)启动常规网站,但我也希望使用相同的脚本启动任务网站

在Flask脚本中,似乎所有命令都是在单个应用程序上运行的进程。是否可以让manage.py启动两个不同的应用程序

我的代码如下所示,create_app是为网站创建Flask app的工厂函数,taskserver是创建taskserver网站的工厂函数

import os
from flask_script import Manager
from app import create_app, database, taskserver

if os.getenv('FLASK_CONFIG'):
    app = create_app(os.getenv('FLASK_CONFIG'))
    manager = Manager(app)
else:
    app = create_app
    manager = Manager(app)
    manager.add_option('-c', '--config_name', dest='config_name', required=False)

@manager.shell
def make_shell_context():
    from app.models.data import base_models
    return dict(app=app, db=database, models=base_models)

if __name__ == "__main__":
    manager.run()
我希望有人知道如何调整manage.py脚本,以便能够启动其中任何一个脚本

更新:

多亏了@Joro Tenev,问题才得以解决。 我最终使用的代码是:

import os
from flask_script import Manager
from app import create_website, create_taskserver


def make_app(app_type, config_name):
    if os.getenv('FLASK_CONFIG'):
        config_name = os.getenv('FLASK_CONFIG')
    if app_type == 'webserver':
        return create_website(config_name)
    else:
        return create_taskserver(config_name)  # i don't know how your factory works, so adjust accordingly

manager = Manager(make_app)

manager.add_option('-a', '--app_type', dest='app_type', required=True)
manager.add_option('-c', '--config_name', dest='config_name', required=False)
要启动不同的应用程序,我使用:

python manage.py --app_type=webserver --config_name=development runserver
python manage.py --app_type=taskserver --config_name=development runserver

您可以将函数传递给Manager的构造函数。该函数应返回一个烧瓶应用程序。您还可以使用
管理器将参数传递给函数。添加\u选项

manager.add_option('-a','--app_type', dest='app_type',required=True)
def make_app(app_type):
  if app_type =='webserver':
    return create_app(os.getenv('FLASK_CONFIG'))
  elif:
    return taskserver(os.getenv('FLASK_CONFIG')) # i don't know how your factory works, so adjust accordingly

manager = Manager(make_app)
你会把它和

$ python manage.py --app_type='webserver'

希望这有帮助:)

谢谢Joro,我需要更改一些小事情,例如,命令行参数不需要引号,但现在可以使用了!我已在原来的问题中添加了完整的解决方案。