У меня установлено приложение Flask, поэтому он может запускать два разных сайта (сайты совместно используют бизнес-логику и модели баз данных, поэтому они используют один и тот же конец). Один из них - это обычный веб-сайт, другой - сайт, на котором выполняются задачи (это веб-интерфейс для съемки длинных задач в сельдерей).Запуск нескольких разных фляжных приложений с помощью manage.py (flask-script)
Приложение в настоящее время использует 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, чтобы иметь возможность запустить любой из них.
UPDATE:
Благодаря @Joro Тенев, проблема решена. код я в конечном итоге это:
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
Спасибо JORO, Были некоторые незначительные вещи, которые я необходимо было изменить, например, аргумент командной строки не нуждался в кавычках, но теперь он работает! Я добавил полное решение в исходный вопрос. –