Я пытаюсь отправить почту в задание 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()
Мой вопрос: даже с контекстом, почему он бросает эту ошибку во время выполнения?