Приложение Django неправильно настроено — модуль приложения имеет несколько местоположений в файловой системе

Думаю, я действительно что-то напутал. В моем приложении django (производственном) я отправил крупное обновление и получаю «Внутреннюю ошибку сервера» всякий раз, когда пытаюсь перейти в свой домен. Я получаю сообщение об ошибке в своих журналах uwsgi:

*** Starting uWSGI 2.0.8 (64bit) on [Thu Jan 29 00:36:43 2015] ***
compiled with version: 4.8.2 on 11 December 2014 17:29:38
os: Linux-3.13.0-41-generic #70-Ubuntu SMP Tue Nov 25 14:40:34 UTC 2014
nodename: ip-172-31-9-208
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
chdir() to /home/ubuntu/web/app
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 15922
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /home/ubuntu/web/ppuwsgi.sock fd 3
Python version: 3.4.0 (default, Apr 11 2014, 13:08:40)  [GCC 4.8.2]
Set PythonHome to /home/ubuntu/.virtualenvs/pennypledge
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0xb57780
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72768 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
added /home/ubuntu/web/ to pythonpath.
Traceback (most recent call last):
  File "/home/ubuntu/.virtualenvs/pennypledge/lib/python3.4/site-packages/django/apps/config.py", line 104, in create
    entry = module.default_app_config
AttributeError: 'module' object has no attribute 'default_app_config'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./pennypledge/wsgi.py", line 14, in <module>
    application = get_wsgi_application()
  File "/home/ubuntu/.virtualenvs/pennypledge/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
    django.setup()
  File "/home/ubuntu/.virtualenvs/pennypledge/lib/python3.4/site-packages/django/__init__.py", line 21, in setup 
    apps.populate(settings.INSTALLED_APPS)
  File "/home/ubuntu/.virtualenvs/pennypledge/lib/python3.4/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
 File "/home/ubuntu/.virtualenvs/pennypledge/lib/python3.4/site-packages/django/apps/config.py", line 107, in create
    return cls(entry, module)
  File "/home/ubuntu/.virtualenvs/pennypledge/lib/python3.4/site-packages/django/apps/config.py", line 41, in __init__
    self.path = self._path_from_module(app_module)
  File "/home/ubuntu/.virtualenvs/pennypledge/lib/python3.4/site-packages/django/apps/config.py", line 70, in _path_from_module
    "with a 'path' class attribute." % (module, paths))
django.core.exceptions.ImproperlyConfigured: The app module <module 'ledger' (namespace)> has multiple filesystem locations (['./ledger', '/home/ubuntu/web/app/ledger']); you must configure this app with an AppConfig subclass with a 'path' class attribute.
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 8549, cores: 1)
--- no python application found, check your startup logs for errors ---
[pid: 8549|app: -1|req: -1/1] 71.195.197.2 () {42 vars in 828 bytes} [Wed Jan 28 17:36:54 2015] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)
--- no python application found, check your startup logs for errors ---
[pid: 8549|app: -1|req: -1/2] 71.195.197.2 () {42 vars in 814 bytes} [Wed Jan 28 17:36:56 2015] GET /favicon.ico => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (1 switches on core 0)
--- no python application found, check your startup logs for errors ---
[pid: 8549|app: -1|req: -1/3] 71.195.197.2 () {38 vars in 640 bytes} [Wed Jan 28 17:37:09 2015] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (1 switches on core 0)
--- no python application found, check your startup logs for errors ---
[pid: 8549|app: -1|req: -1/4] 162.243.163.123 () {40 vars in 751 bytes} [Wed Jan 28 17:37:09 2015] GET /favicon.ico => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (1 switches on core 0)
--- no python application found, check your startup logs for errors ---
[pid: 8549|app: -1|req: -1/5] 71.195.197.2 () {40 vars in 748 bytes} [Wed Jan 28 17:37:10 2015] GET /favicon.ico => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (1 switches on core 0)
--- no python application found, check your startup logs for errors ---
[pid: 8549|app: -1|req: -1/6] 71.195.197.2 () {38 vars in 591 bytes} [Wed Jan 28 17:37:11 2015] GET /favicon.ico => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)

Я понятия не имею, что происходит: The app module <module 'ledger' (namespace)> has multiple filesystem locations (['./ledger', '/home/ubuntu/web/app/ledger']); you must configure this app with an AppConfig subclass with a 'path' class attribute..

Вот мой файл settings.py:

DEBUG = True
TEMPLATE_DEBUG = DEBUG


# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '<SECRET_KEY>'


ALLOWED_HOSTS = ['.example.com','.example2.com']


# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'ledger',
    'extension',
    'plugin',
    'emailmanager',
    'bookmarklet',
    'social.apps.django_app.default',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'pennypledge.urls'

WSGI_APPLICATION = 'pennypledge.wsgi.application'

AUTH_USER_MODEL = 'ledger.User'


DATABASES = {
    'default': {
        'ENGINE': 'postgresql_psycopg2', 
        'NAME': 'database',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}

# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'MST'

USE_I18N = True

USE_L10N = True

USE_TZ = False #I don't think we care about TZ's. If we do then we need to change the deleting of transaction code.


STATIC_URL = '/static/'

STATICFILES_DIRS = (
    'C:/pennypledge/pennypledge/static/',
    '/Users/croberts/pennypledge/static/',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.tz',
    'django.contrib.messages.context_processors.messages',
    'social.apps.django_app.context_processors.backends',
    'social.apps.django_app.context_processors.login_redirect',
)

AUTHENTICATION_BACKENDS = (
    'social.backends.facebook.FacebookOAuth2',
    'ledger.custom_social_auth.YoutubeOAuth2',
    'social.backends.twitter.TwitterOAuth',
    'django.contrib.auth.backends.ModelBackend',
)

Наконец, когда я пытаюсь проверить предыдущую версию кода. Я получаю те же проблемы.

изменить — добавить файл uwsgi.conf

# file: /etc/init/ppuwsgi.conf 
description "uWSGI server for PennyPledge"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
exec /usr/local/bin/uwsgi --home /home/ubuntu/web/app/ --socket /home/ubuntu/web/ppuwsgi.sock --chmod-socket=666 --module=pennypledge.wsgi --pythonpath /home/ubuntu/web/ -H /home/ubuntu/.virtualenvs/pennypledge --logto /home/ubuntu/web/logs/uwsgi.log --chdir=/home/ubuntu/web/app --chmod-socket=666

Я не знаю, почему проблема возникла из-за ошибки uwsgi, поскольку я только обновил проект Django.


person Chase Roberts    schedule 29.01.2015    source источник
comment
Можем ли мы увидеть вашу конфигурацию uWSGI? Файл .ini или что-то в этом роде? И ваш wsgi.py   -  person Jamie Counsell    schedule 29.01.2015
comment
Моя проблема была в Visual Studio: я переименовал приложение, затем переместил его, а VS не переместил все папки.   -  person T.Coutlakis    schedule 08.11.2016


Ответы (3)


Проблема заключалась в том, что я удалил файл __init__.py. Судя по всему, django использует их, чтобы узнать, какие папки являются приложениями, поэтому они очень важны.

person Chase Roberts    schedule 29.01.2015
comment
это должен быть принятый ответ! У меня была та же проблема, и добавление обратно init.py решило проблему. Спасибо! - person Richard; 04.02.2015
comment
У меня была аналогичная ошибка, и это дало мне ключ к моему решению, init.py определил default_app_config = 'app_name.apps.Class_name', а apps.py также определил class Class_name(AppConfig): name = 'app_name' У меня есть комментарий default_app_config в init.py - person Paullo; 24.12.2017
comment
Но нужен атрибут класса «путь»: ... вы должны настроить это приложение с помощью подкласса AppConfig с атрибутом класса «путь». - person Timo; 05.04.2018
comment
Я думал, что init.py не нужен в Python 3 - person ospider; 20.01.2019
comment
не для пространств имен. Джанго думает, что это пространство имен, и не знает, где найти приложение. - person nerdoc; 16.01.2020
comment
Что меня зацепило, так это то, что я добавил init.py, но не запускал его локально. Когда я запускал сборку docker, мои каталоги pycache отправлялись демону, что, похоже, вызывало ошибку даже при создании init.py. Мне пришлось добавить pycache в .dockerignore, прежде чем все заработало должным образом. - person BnMcG; 07.02.2020
comment
РАБОТАЕТ КРАСИВО! СПАСИБО! - person Geancarlo Murillo; 24.04.2020
comment
Файл init.py должен находиться в каталоге приложения; в этом случае по бухгалтерской книге. - person mcagriardic; 24.09.2020
comment
Боже, спасибо за это ... только что сделал то же самое, что привело к этой ошибке. Реальная экономия времени :-) - person Yoeri; 25.04.2021

Ошибка в вашем приложении ledger. Это специальное приложение?

Из исходного кода Django ошибка исходит от _path_from_module(app_module)

    # Filesystem path to the application directory eg.
    # u'/usr/lib/python2.7/dist-packages/django/contrib/admin'. Unicode on
    # Python 2 and a str on Python 3.
    if not hasattr(self, 'path'):
        self.path = self._path_from_module(app_module)

В качестве быстрого исправления, если это ваше приложение, вы можете настроить его с помощью подкласса AppConfig с допустимым атрибутом path, что предотвратит выполнение ошибки. Я изучаю это дальше.

Если ledger не является вашим приложением, и вы обновили его с помощью pip или каким-либо другим способом, это объясняет, почему проверка более старой версии не решает проблему. Попробуйте получить более старую версию этого приложения из его репозитория (если применимо) и отправьте отчет об ошибке.

person Jamie Counsell    schedule 29.01.2015
comment
Это пользовательское приложение. Можете ли вы опубликовать пример того, как создать подкласс AppConfig. Я смотрю на документы, но все еще немного смущен. - person Chase Roberts; 29.01.2015
comment
Ха-ха! Я понял! Я удалил файл __init__.py. Я не знаю, что это делает или почему это будет работать локально на моей машине, но это исправило это. - person Chase Roberts; 29.01.2015
comment
Интересно. Файлы инициализации можно использовать для многих вещей, таких как загрузка и настройка модулей, сайт администратора и т. д. Просто убедитесь, что вы видите, что он делает внутри, чтобы вызвать ошибку. Если он поддерживает вашу пользовательскую модель аутентификации, вы не хотите все испортить! - person Jamie Counsell; 29.01.2015

Внутри каталога приложения отредактируйте файл apps.py и добавьте атрибут path, как говорит ошибка. Например:

from django.apps import AppConfig
import os
from django.conf import settings


class TranslatorConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'translator'
    path = os.path.join(settings.BASE_DIR, 'translator')

И... БУМ!!

person Otuoma Sanya    schedule 26.07.2021