2016-11-15 6 views
0

haben app.py:RQ Flask Heroku Arbeiter Anwendungskontext

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() 

und 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() 

und andere Datei mit

q = Queue(connection=conn) 
q.enqueue(process_data, data) 

wo process_data eine Funktion ist mit db (sqlalchemy)

Wie soll ich den App-Kontext an den Arbeiter weitergeben? der Fehler ist:

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 

Antwort

0

gelöst und wirkt wie ein Zauber durch den gesamten Code zu app config app.py in init.py Zusammenhang bewegen (mit Ausnahme app.run()) und in app.py Import App