RQ Flask Heroku рабочий контекст приложения
Есть app.py:
app = Flask(__name__)
with app.app_context():
app.config.from_object(os.environ['APP_SETTINGS'])
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.debug = True
db.app = app
db.init_app(app)
if __name__ == '__main__':
app.run()
и worker.py:
import os
import redis
from rq import Worker, Queue, Connection
listen = ['high', 'default', 'low']
redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
conn = redis.from_url(redis_url)
if __name__ == '__main__':
with Connection(conn):
worker = Worker(map(Queue, listen))
worker.work()
и другой файл, содержащий
q = Queue(connection=conn)
q.enqueue(process_data, data)
где process_data - это функция, использующая db (sqlalchemy)
Как мне передать контекст приложения работнику? ошибка:
File "/app/.heroku/python/lib/python3.5/site-packages/flask_sqlalchemy/__init__.py", line 153, in __init__:
self.app = app = db.get_app()
RuntimeError: application not registered on db instance and no application bound to current context
1 ответ
Решена и работает как чудо, перемещая весь код, связанный с настройкой приложения, из app.py в init.py (исключая app.run()) и в app.py import app