セロリが正常に動作し、Flask-Mail 自体も正常に動作する Flask アプリがあります。
from celery import Celery
from flask_mail import Mail, Message
app = Flask(__name__)
mail = Mail(app)
celery = Celery('main_app',
broker='mongodb://localhost',
backend='mongodb://localhost')
@celery.task
def cel_test():
return 'cel_test'
@app.route('/works_maybe')
def works_maybe():
return cel_test.delay()
ここまでは順調ですね
cel_test はセロリ ワーカーで正常に動作します。すべてがmongoに表示されます。
しかし、ここからが奇妙になります。「サインアップ」とメールの方法は、なし@celery.task
でも 100% 機能しますが、タスクになると爆発します。
@celery.task
def send_email(some_arg, name, email):
msg = Message(…message details..)
return mail.send(msg)
@app.route("/signup", methods=['POST'])
def signup():
return send_email.delay(...stuff for the message…)
トレース
R = retval = fun(*args, **kwargs)
File "/Users/username/pymods/virtualenvs/directory/lib/python2.7/site-packages/celery-3.0.15-py2.7.egg/celery/task/trace.py", line 415, in __protected_call__
return self.run(*args, **kwargs)
File "/Users/username/pymods/directory/directory/main_app/main_app.py", line 43, in send_email
something = 'a string in the Message'),
File "/Users/username/pymods/virtualenvs/directory/lib/python2.7/site-packages/flask/templating.py", line 123, in render_template
ctx.app.update_template_context(context)
AttributeError: 'NoneType' object has no attribute 'app'
あるケースでセロリがうまく機能する理由を誰かが説明できますか?
おそらく、より一般的にPythonで学ぶ必要があるものはありますか?
少なくともこの種の問題へのアプローチに関しては、どんな考えでも大歓迎です。