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

Другие вопросы по тегам