Flask アプリをセットアップして、2 つの異なるサイトを実行できるようにしました (サイトはビジネスロジックとデータベース モデルを共有しているため、同じバックエンドを使用しています)。1 つは通常の Web サイトで、もう 1 つはタスクを実行するサイトです (長時間実行されるタスクをセロリに送信するための Web インターフェースです)。
アプリは現在、Flask-Script (manage.py コマンド) を使用して通常の Web サイトを開始していますが、同じスクリプトを使用してタスク サイトも開始したいと考えています。
Flask-Script では、すべてのコマンドが単一のアプリで実行されるプロセスのようです。manage.py に 2 つの異なるアプリを起動させることは可能ですか?
私のコードは次のようになりました。ここで、create_appは Web サイト用の Flask アプリを作成するためのファクトリ関数であり、taskserverは taskserver Web サイトを作成するためのファクトリ関数です。
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