私はAPIを持ったFlask Adminアプリケーションを開発しています。アプリの一部には、呼び出されたときに電子メールを送信する関数が含まれていました。私は電子メールを送るためにセロリを使うべきだと言われました。以前のコードをCeleryを使ってFlask Adminでメールを送信する
CELERY_BROKER_URL = "redis://redis:6379/0"
のinitの.py
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
:
config.py:
は、私は、次のコードを追加 https://blog.miguelgrinberg.com/post/using-celery-with-flask上のアドバイスに従っだった:
@app.route('/api/postupdate', methods=['POST'])
@auth_token_required
def post_update():
if not request.json[0]:
return make_response(jsonify({'error': 'Request not in JSON'}), 400)
updates = []
for entry in request.json:
updates.append({'trackingnumber':entry['trackingnumber'], 'date': datetime.strptime(entry['date'], '%Y-%m-%d %H:%M:%S'), \
'status':entry['status'], 'location':entry['location']})
send_email(updates)
return make_response(jsonify({'success': 'Update added'}), 200)
は私がその後、def send_email()
の上に@celery.task
を追加send_email. delay(updates)
にsend_email(updates)
から行を変更しかし、今、電子メールが送信されることはありません。トラブルシューティングを開始しようとしているところがどこにあるかわからない。エラーはスローされず、プログラムは成功したかのように継続します。
すべてが別々のドッカーコンテナにあります。ここに私のドッキングウィンドウのコンファイルは次のとおりです。
version: '2'
services:
db:
image: postgres
environment:
- PG_PASSWORD=postgres
nginx:
image: nginx:latest
links:
- dev:uwsgi
ports:
- "80:80"
- "8080:8080"
volumes:
- ./x/nginx/nginx.conf:/etc/nginx/nginx.conf
redis:
image: redis
ports:
- "6379:6379"
dev:
build: ./x/
volumes:
- ./x/app:/code/app
expose:
- "3031"
depends_on:
- db
links:
- redis
scraper:
build: ./Scraper/
volumes:
- ./Scraper/scraper.py:/code/scraper.py
- ./Scraper/x.py:/code/x.py
depends_on:
- db
- dev
アドバイスは、私は、以下の改正を行った受け取った後:
は、新たなサービスとして、ファイル・compose.yamlをドッキングウィンドウには、以下の
celery:
build: ./Worker/
links:
- redis
volumes:
- ./x/app:/code/app
実行を追加しました.SH:
celery worker -A app.celery
新しいdockerfile:
FROM ubuntu:latest
ENV TERM xterm
RUN apt-get update -y && apt-get install -y python3-pip python3.5-dev build-essential libpq-dev nano
ADD ./requirements /code/requirements
ADD run.sh /code/run.sh
RUN pip3 install --upgrade pip
RUN pip3 install -r /code/requirements/base.txt
WORKDIR /code
RUN chmod 777 run.sh
CMD "./run.sh"
これは、今、あなたのセットアップはRedisのによって管理キューに電子メールタスクを置くために、これまでに行われたものはコード1
ありがとうございました。どのように私はそれを逃したか分からない。私はプログラムに加えた変更を加えるために質問を修正しました。これにより、セロリのサービスがコード0で直ちに終了します。セロリのサービスがどのように機能するのか、ちょっと混乱しています。 boto.sesとninjaのテンプレートを使用して電子メールを送信するには、コードにアクセスする必要がありますが、どこを探すべきかを知る方法がわかりません。 –
'ls -rx/app'を投稿することができます –
devコンテナ内から実行すると、次のようになります:' utilities.pyc utilities.py templates models email.pyc email.py config.py api.pyc api.py __pycache__ __init __。pyc __init__ .py' –