【问题标题】:'ERROR: relation does not exist at character', error in celery with django'错误:字符不存在关系',芹菜与 django 错误
【发布时间】:2019-02-02 10:07:58
【问题描述】:

我有一个名为 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)

视图中的查询运行没有问题,同样,如果我同步调用任务而没有视图延迟,它也运行没有问题,我已经运行了迁移,问题也没有解决。

非常感谢您的帮助。

【问题讨论】:

  • 添加模型/运行迁移后是否重启了 celery?
  • 是的,我使用 docker compose 重建了所有服务,包括使用 django 的应用程序
  • 您是否将UserApp 添加到INSTALLED_APPS
  • @JPG 是的,即使在视图中查询也很有效

标签: django django-models celery django-celery celerybeat


【解决方案1】:

我发现了问题,这是由于 docker compose 文件中的错误配置,这是我的文件。

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。所以对这两个 celery 的鼠标服务也添加了 'environment: - POSTGRES_USER = cxc_web',并修复了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 2017-04-26
    • 2015-06-22
    • 2016-07-05
    • 2014-11-07
    • 2013-12-21
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多