运行 多个不同的烧瓶应用程序 manage.py(烧瓶脚本)
Run multiple different flask apps with manage.py (flask-script)
我设置了一个 Flask 应用程序,因此它可以 运行 两个不同的站点(这些站点共享业务逻辑和数据库模型,因此它们使用相同的后端)。一个只是常规网站,另一个是 运行s 任务的网站(它是一个用于将长 运行ning 任务拍摄到 celery 中的网络界面)
该应用目前使用 Flask-Script(manage.py 命令)来启动常规网站,但我也想使用相同的脚本来启动任务站点。
在 Flask-Script 中,似乎所有命令都是单个应用程序上的进程 运行。是否可以让 manage.py 启动两个不同的应用程序?
我现在的代码如下,其中create_app是为网站创建Flask应用的工厂函数,而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 的构造函数。该函数应该 return 一个 Flask 应用程序。您还可以使用 manager.add_option
将参数传递给函数
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'
希望这对您有所帮助:)
我设置了一个 Flask 应用程序,因此它可以 运行 两个不同的站点(这些站点共享业务逻辑和数据库模型,因此它们使用相同的后端)。一个只是常规网站,另一个是 运行s 任务的网站(它是一个用于将长 运行ning 任务拍摄到 celery 中的网络界面)
该应用目前使用 Flask-Script(manage.py 命令)来启动常规网站,但我也想使用相同的脚本来启动任务站点。
在 Flask-Script 中,似乎所有命令都是单个应用程序上的进程 运行。是否可以让 manage.py 启动两个不同的应用程序?
我现在的代码如下,其中create_app是为网站创建Flask应用的工厂函数,而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 的构造函数。该函数应该 return 一个 Flask 应用程序。您还可以使用 manager.add_option
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'
希望这对您有所帮助:)