我目前在AWS上使用ElasticBeanstalk(EB)设置了带有flask-sqlalchemy扩展名的postgres。 Postgres正在使用RDS运行。现在我想设置一些后台任务。我读到了关于Celery,似乎很合适的用例。
我想了解如何在AWS上设置它以便它与同一个数据库进行通信。对于我想要使用Redis的实际队列。后台流程的业务逻辑和我在flask-webserver中的内容非常相互交织。部署过程如何(有或没有EB)。如果需要celery和redis,我可以设置一个新的实例,只要我不必将业务逻辑分开很多。
我一直在考虑的另一个hacky解决方案是在一个节点上设置crons,该节点在Flask应用程序中命中某些URL以执行后台任务。但我宁愿有一个更具伸缩性的解决方案。
答案 0 :(得分:2)
我正在使用具有类似设置的Flask,我遵循了这个答案:
How do you run a worker with AWS Elastic Beanstalk?
我还使用此.config文件设置redis:
https://gist.github.com/yustam/9086610
但是,对于我的设置,我将命令更改为:
command=/opt/python/run/venv/bin/python2.7 manage.py celery
我的manage.py有:
@manager.command
def celery():
"""
Start the celery worker.
"""
with app.app_context():
return celery_main(['celery', 'worker'])