【问题标题】:ERROR: You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure()错误:您必须定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()
【发布时间】:2018-04-26 12:50:03
【问题描述】:

我正在远程 Ubuntu 服务器上通过 Supervisor 运行 Celery。它在我的celery.log 中给了我以下错误:

 (env) zorgan@app:~/app$ tail /var/log/supervisor/celery.log
        password = models.CharField(_('password'), max_length=128)
      File "/home/zorgan/app/env/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 1061, in __init__
        super(CharField, self).__init__(*args, **kwargs)
      File "/home/zorgan/app/env/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 172, in __init__
        self.db_tablespace = db_tablespace or settings.DEFAULT_INDEX_TABLESPACE
      File "/home/zorgan/app/env/lib/python3.5/site-packages/django/conf/__init__.py", line 56, in __getattr__
        self._setup(name)
      File "/home/zorgan/app/env/lib/python3.5/site-packages/django/conf/__init__.py", line 39, in _setup
        % (desc, ENVIRONMENT_VARIABLE))
    django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, 
    but settings are not configured. You must either define the environment variable 
    DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

即使我在celery.py 中将值添加到DJANGO_SETTINGS_MODULE

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'draft1.settings')

app = Celery("draft1", broker=CELERY_BROKER_URL)
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

如果你好奇,这是我的配置/etc/supervisor/conf.d/app-celery.conf

[program:app-celery]
command=/home/zorgan/app/env/bin/celery worker -A draft1 --loglevel=INFO
directory=/home/zorgan/app/draft1

numprocs=1
stdout_logfile=/var/log/supervisor/celery.log
stderr_logfile=/var/log/supervisor/celery.log
autostart=true
autorestart=true
startsecs=10

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

stopasgroup=true

; Set Celery priority higher than default (999)
; so, if rabbitmq is supervised, it will start first.
priority=1000

知道问题是什么吗?

编辑:

__init__.py:

from __future__ import absolute_import, unicode_literals

#This will make sure the app is always imported when
#Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ['celery_app']

【问题讨论】:

  • 您使用的是哪个版本的 celery?可以添加celery.pydraft1/__init__.py 的完整内容吗?从项目目录执行celery -A draft1 worker -l info的输出是什么?
  • 该命令的输出是相同的错误:django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 知道问题是什么吗?

标签: python django celery


【解决方案1】:

我们必须遵循以下代码。

芹菜.py

import django
import os

from celery import Celery

os.environ['DJANGO_SETTINGS_MODULE'] = 'draft1.settings'
django.setup()

app = Celery('tasks', broker='amqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y

参考:http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

【讨论】:

    猜你喜欢
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2012-07-14
    • 2014-06-28
    • 2020-03-19
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多