2016-07-23 6 views
0

Wenn ich flask-apscheduler (nicht apscheduler), habe ich einige probleme in meinem kolben webprojekt. Vor allem, wenn ich db(flask-sqlalchemy) Objekte verwendet habe. Das Problem kann sein:wie db-instanz in flash-apscheduler jobs funktion zu verwenden

JOBS = [ 
     { 
      'id': 'job1', 
      'func': 'app.monitor.views:test', 
      'args':(), 
      'trigger': 'interval', 
      'seconds': 2 
     } 
    ] 

./app/ init Py:

from flask import Flask 
from flask.ext.bootstrap import Bootstrap 
from flask.ext.mail import Mail 
from flask.ext.moment import Moment 
from flask.ext.sqlalchemy import SQLAlchemy 
from flask.ext.login import LoginManager 
from flask.ext.pagedown import PageDown 
from flask_apscheduler import APScheduler 
from celery import Celery 

# from apscheduler.schedulers.blocking import BlockingScheduler 
from config import config,Config 
bootstrap = Bootstrap() 
mail = Mail() 
moment = Moment() 
db = SQLAlchemy() 
pagedown = PageDown() 
celery = Celery(__name__, broker=Config.CELERY_BROKER_URL) 
# https://pypi.python.org/pypi/Flask-APScheduler 
scheduler = APScheduler() 
login_manager = LoginManager() 
login_manager.session_protection = 'strong' 
login_manager.login_view = 'auth.login' 

def create_app(config_name): 
    app = Flask(__name__) 
    app.config.from_object(config[config_name]) 
    config[config_name].init_app(app) 
    bootstrap.init_app(app) 
    mail.init_app(app) 
    moment.init_app(app) 
    db.init_app(app) 
    login_manager.init_app(app) 
    pagedown.init_app(app) 
    scheduler.init_app(app) 
    celery.conf.update(app.config) 
    if not app.debug and not app.testing and not app.config['SSL_DISABLE']: 
     from flask.ext.sslify import SSLify 
     sslify = SSLify(app) 
    from .monitor import monitor as monitor_1_0_blueprint 
    from .laser import laser as laser_1_0_blueprint 
    app.register_blueprint(monitor_blueprint,url_prefix='/monitor/api') 
    app.register_blueprint(laser_1_0_blueprint,url_prefix='/laser/api/v1.0') 
    return app 

Error 1:db is : Error 2:db is :No handlers could be found for logger "apscheduler.executors.default" Error 3:db is : raise RuntimeError('working outside of application context') RuntimeError: working outside of application context

Der Schlüssel für das Problem ist die db und App-Objekte in flaschen apscheduler Arbeitsplätze zu erhalten Funktion (views.py):

from app import scheduler 
def test(): 
    #to Solve the log error problem 
    import logging 
    log = logging.getLogger('apscheduler.executors.default') 
    log.setLevel(logging.INFO) # DEBUG 
    fmt = logging.Formatter('%(levelname)s:%(name)s:%(message)s') 
    h = logging.StreamHandler() 
    h.setFormatter(fmt) 
    log.addHandler(h) 
    #get the app object 
    app = scheduler.app 
    #get the db object and use it 
    with app.app_context(): 
     print '........................',db 

Antwort

0
def test(): 
    #to Solve the log error problem 
    import logging 
    log = logging.getLogger('apscheduler.executors.default') 
    log.setLevel(logging.INFO) # DEBUG 
    fmt = logging.Formatter('%(levelname)s:%(name)s:%(message)s') 
    h = logging.StreamHandler() 
    h.setFormatter(fmt) 
    log.addHandler(h) 
    #get the app object 
    app = scheduler.app 
    #get the db object and use it 
    with app.app_context(): 
     print '........................',db  #the right db object 
0
from app import scheduler# 
    def test(): 
     #to Solve the log error problem 
     import logging 
     log = logging.getLogger('apscheduler.executors.default') 
     log.setLevel(logging.INFO) # DEBUG 
     fmt = logging.Formatter('%(levelname)s:%(name)s:%(message)s') 
     h = logging.StreamHandler() 
     h.setFormatter(fmt) 
     log.addHandler(h) 
     #get the app object 
     app = scheduler.app 
     #get the db object and use it 
     with app.app_context(): 
     print '........................',db 
Verwandte Themen