Файл "/usr/local/lib/python3.6/site-packages/seacucumber/tasks.py", except SESAddressBlacklistedError, exc:
Я работаю над переводом старой версии Django Project (1.8) на новую версию. Я использую python 3.9, Django 3.2.7, docker с celery, Redis, flower on a board. Сейчас такие контейнеры как db(postgres), web(python 3.6), Redis работают хорошо, но celery(worker) и flower не показывают прицелы на жизнь с ошибкой выше.
celery.py
from __future__ import absolute_import, unicode_literals
import celery
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
from django.conf import settings # noqa
app = Celery('core')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
cwd = os.path.dirname(os.path.realpath(__file__))
environment_name = os.getenv('ENVIRONMENT_NAME', 'dev').lower()
environment_path = os.path.join(cwd, '', os.getenv('DJANGO_ENVDIR',
'envs/%s' % environment_name))
if os.path.isdir(environment_path):
import envdir
envdir.open(environment_path)
class Celery(celery.Celery):
def on_configure(self):
if settings.ENABLE_SENTRY:
import raven
from raven.contrib.celery import register_signal, register_logger_signal
client = raven.Client(settings.RAVEN_DSN)
# register a custom filter to filter out duplicate logs
register_logger_signal(client)
# hook into the Celery error handler
register_signal(client)
Docker-compose.yaml
version: '3.8'
services:
redis:
image: redis
networks:
- default
ports:
- 6379:6379
worker:
build:
context: .
dockerfile: Dockerfile
image: madefire/chordtest
command: celery worker -A core --loglevel=info
networks:
- default
depends_on:
- redis
env_file:
- ./.env.dev
db:
container_name: db
hostname: db
image: postgres:13.0-alpine
networks:
- default
ports:
- 5432:5432
volumes:
- ./postgres_data:/var/lib/postgresql/data/
env_file:
- ./.env.dev
web:
container_name: web
hostname: web
networks:
- default
links:
- db
build: ./
volumes:
- ./:/app
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
flower:
networks:
- default
build: ./
command: flower -A core --port=5555 \
--broker_api=redis://redis:6379/0
ports:
- 5555:5555
# - 15672:15672
depends_on:
- worker
- redis
volumes:
postgres_data:
Dockerfile:
FROM python:3.6
RUN apt-get update && \
apt-get install -y build-essential && \
apt-get install -y poppler-utils && \
apt-get install gettext -y && \
apt-get install -y libgdal-dev
RUN export CPLUS_INCLUDE_PATH=/usr/include/gdal && \
export C_INCLUDE_PATH=/usr/include/gdal
COPY . /app
WORKDIR /app
RUN pip install --upgrade pip && \
pip install -r requirements.txt
RUN apt-get remove -y build-essential && \
apt-get autoremove -y && \
apt-get clean -y && \
rm -rf /var/lib/apt/lists/* && \
rm -rf /root/.cache
CMD ["/app/entrypoint.sh"]
EXPOSE 8000
установки, связанные с сельдереем, морским огурцом:
BROKER_TRANSPORT_OPTIONS = {
'visibility_timeout': int(os.getenv('BROKER_VISIBILITY_TIMEOUT', 43200)), # 12 hours
}
CELERY_BROKER_POOL_LIMIT = int(os.getenv('BROKER_POOL_LIMIT', 1))
CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack']
CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = {
'default': {
'exchange': 'default',
'exchange_type': 'topic',
'binding_key': 'tasks.#'
}
}
Морской огурец
ENABLE_SEACUCUMBER = str(os.getenv('ENABLE_SEACUCUMBER', PRODUCTION)).lower() == 'true'
if ENABLE_SEACUCUMBER:
INSTALLED_APPS += (
'seacucumber',
)
CUCUMBER_RATE_LIMIT = int(os.getenv('CUCUMBER_RATE_LIMIT', 1))
EMAIL_BACKEND = 'seacucumber.backend.SESBackend'
MAILER_EMAIL_BACKEND = 'seacucumber.backend.SESBackend'
CUCUMBER_ROUTE_QUEUE = os.getenv('CUCUMBER_ROUTE_QUEUE', None)
if CUCUMBER_ROUTE_QUEUE is not None:
CELERY_ROUTES['seacucumber.tasks.#'] = {'queue': CUCUMBER_ROUTE_QUEUE}
ENABLE_SES = str(os.getenv('ENABLE_SES', PRODUCTION)).lower() == 'true'
if ENABLE_SES:
AWS_SES_REGION_NAME = os.getenv('AWS_SES_REGION_NAME', 'eu-west-1')
AWS_SES_REGION_ENDPOINT = os.getenv('AWS_SES_REGION_ENDPOINT', 'email.eu-west-1.amazonaws.com')
# Workaround for seacucumber not having the option to set region (hasn't been pushed to a stable version).
# Instead we override the boto SESConnection classes defaults.
from boto.ses import SESConnection
SESConnection.DefaultRegionName = AWS_SES_REGION_NAME
SESConnection.DefaultRegionEndpoint = AWS_SES_REGION_ENDPOINT