我认为我真的搞砸了。在我的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项目。
答案 0 :(得分:67)
问题是我删除了__init__.py
文件。显然,django使用它们来了解哪些文件夹是 apps ,因此它们非常重要。
答案 1 :(得分:1)
错误发生在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
或其他方式对其进行了更新,则可以解释为什么检出旧版本无法解决问题。尝试从其存储库中获取该应用程序的旧版本(如果适用)并提交错误报告。
答案 2 :(得分:0)
在应用程序目录中,编辑文件 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')
还有……轰隆隆!!