2016-10-21 1 views
0

Я пытаюсь отправить почту в задание celery, используя флэшку, однако я продолжаю получать эту ошибку времени выполнения RuntimeError('working outside of application context',). Это код, у меня есть в самом файле:флеш-почта «завершение контекстной ошибки» даже с контекстом

from app import app 
from celery import Celery 
from flask.ext.mail import Message 
from flask import current_app 

# config 
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0' 
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0' 

# set up celery 
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL']) 
celery.conf.update(app.config) 

# put the processing task here 
@celery.task 
def send_results(filename, email_addr): 
    msg = Message('testing email', recipients=[email_addr]) 
    msg.body = 'testing this funct' 
    with app.app_context(): 
     current_app.mail.send(msg) 
    print(filename) 
    print(email_addr) 

Следует отметить, что он имеет app.app_context() линию там (На данный момент я не уверен, правильно ли это или нет)

Другая вещь, чтобы отметить что приложение еще не полностью «завершено». В частности то, что я имею в виду, что создание приложения осуществляется с помощью функции под названием create_app, как показано здесь: https://github.com/swarajd/seq2flux/blob/master/app/startup/create_app.py

Эта функция вызывается в manage.py здесь: https://github.com/swarajd/seq2flux/blob/master/manage.py

Я пытаюсь вызвать эту задачу в файле с именем views.py, который обрабатывает все виды. Одна функция, в частности, что касается этого заключается в следующем:

@core_blueprint.route('data_analysis', methods=['GET', 'POST']) 
@login_required 
def data_analysis(): 

    # print(request.form) 
    form = DataAnalysisForm(CombinedMultiDict((request.files, request.form))) 

    # print(form) 

    if (request.method == 'POST' and form.validate()): 

     # print(request.form) 
     # print(request.files) 
     file = request.files['seqFile'] 
     filename = secure_filename(file.filename) 
     file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 

     mail_engine = current_app.extensions.get('mail', None) 
     # print(mail_engine) 

     # print(current_user) 
     send_results.delay(filename, current_user.email) 


     flash('processing job scheduled!') 

     # Redirect to home page 
     return redirect(url_for('core.data_analysis')) 


    return render_template('core/data_analysis.html', form=form) 

важная линия: send_results.delay()

Мой вопрос: даже с контекстом, почему он бросает эту ошибку во время выполнения?

ответ

0

Причина, по которой это происходило, заключалась в том, что сам созданный по электронной почте MESSAGE создавался вне инструкции with, вызывая ошибку времени выполнения.

Смежные вопросы