«ОШИБКА: отношение не существует в символе», ошибка в сельдерее с django - PullRequest
0 голосов
/ 27 августа 2018

У меня есть модель с именем UserApp, из которой я делаю запрос из асинхронной задачи с Celery, но я получаю следующую ошибку из вывода docker compose.

postgres_1 | ОШИБКА: отношение "users_userapp" не существует в персонаж 536

сельдерей_1 | django.db.utils.ProgrammingError: отношение "users_userapp" не существует

Это код задачи:

@app.task(bind=True, default_retry_delay=50, max_retries=10, ignore_result=False)
def send_reset_password_email_task(self, muser):
    user = UserApp.objects.get(pk=muser.get('id'))
    print("send_reset_password_email_task user: ",user)

этот запрос из представлений выполняется без проблем, точно так же, если я вызываю задачу синхронно без задержки из представления, он также выполняется без проблем, я уже выполнил миграцию, и проблема также не устранена.

Буду очень признателен за помощь.

1 Ответ

0 голосов
/ 29 августа 2018

Я обнаружил проблему, это было из-за неправильной конфигурации в файле создания докера, это был мой файл.

version: '2'

volumes:   postgres_data_develop: {}   postgres_backup_develop: {}

services:   postgres:
    build: ./compose/postgres
    volumes:
      - postgres_data_develop:/var/lib/postgresql/data
      - postgres_backup_develop:/backups
    environment:
      - POSTGRES_USER=cxc_web
    ports:
      - "5432:5432"

  django:
    build:
      context: .
      dockerfile: ./compose/django/Dockerfile-dev
    command: python /app/manage.py runserver_plus 0.0.0.0:8000
    depends_on:
      - postgres
    environment:
      - POSTGRES_USER=cxc_web
      - USE_DOCKER=yes
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    links:
      - postgres

  redis:
    image: "redis:alpine"

  #celery   celery:
    build: 
      context: .
      dockerfile: ./compose/django/Dockerfile-dev
    command: celery -A config.settings worker -l info
    #command: ./celery/run_celery.sh
    volumes:
      - .:/app
      #- .:/code
    depends_on:
      - postgres
      - redis   celery-beat:
    build: 
      context: .
      dockerfile: ./compose/django/Dockerfile-dev
    command: celery -A config.settings beat -l info
    volumes:
      - .:/app
    depends_on:
      - postgres
      - redis

из-за конфигурации 'environment: - POSTGRES_USER = cxc_web', в службе django приложение было подключено к базе данных 'cxc_web', в то время как другие службы были подключены к базе данных с именем службы по умолчанию, которое в этом дело называется postgres. поэтому к двум микросервисам из сельдерея также добавьте 'environment: - POSTGRES_USER = cxc_web' и исправьте проблему.

...