Estoy intentando configurar varios archivos de configuración (desarrollo, producción, ..) que incluyen algunas configuraciones básicas. Aunque no puedo tener éxito. Cuando intento ejecutar ./manage.py runserver
, aparece el siguiente error:
(cb)clime@den /srv/www/cb $ ./manage.py runserver
ImproperlyConfigured: The SECRET_KEY setting must not be empty.
Aquí está mi módulo de configuración:
(cb)clime@den /srv/www/cb/cb/settings $ ll
total 24
-rw-rw-r--. 1 clime clime 8230 Oct 2 02:56 base.py
-rw-rw-r--. 1 clime clime 489 Oct 2 03:09 development.py
-rw-rw-r--. 1 clime clime 24 Oct 2 02:34 __init__.py
-rw-rw-r--. 1 clime clime 471 Oct 2 02:51 production.py
Configuración básica (contiene SECRET_KEY):
(cb)clime@den /srv/www/cb/cb/settings $ cat base.py:
# Django base settings for cb project.
import django.conf.global_settings as defaults
DEBUG = False
TEMPLATE_DEBUG = False
INTERNAL_IPS = ('127.0.0.1',)
ADMINS = (
('clime', '[email protected]'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
#'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'cwu', # Or path to database file if using sqlite3.
'USER': 'clime', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'Europe/Prague'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = False
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = False # TODO: make this true and accustom date time input
DATE_INPUT_FORMATS = defaults.DATE_INPUT_FORMATS + ('%d %b %y', '%d %b, %y') # + ('25 Oct 13', '25 Oct, 13')
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = '/srv/www/cb/media'
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = '/media/'
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = '/srv/www/cb/static'
# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
# Make this unique, and don't share it with anybody.
SECRET_KEY = '8lu*6g0lg)9z!ba+a$ehk)xt)x%rxgb$i1&022shmi1jcgihb*'
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.request',
'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',
'web.context.inbox',
'web.context.base',
'web.context.main_search',
'web.context.enums',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'watson.middleware.SearchContextMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'middleware.UserMemberMiddleware',
'middleware.ProfilerMiddleware',
'middleware.VaryOnAcceptMiddleware',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
ROOT_URLCONF = 'cb.urls'
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'cb.wsgi.application'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'/srv/www/cb/web/templates',
'/srv/www/cb/templates',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'south',
'grappelli', # must be before admin
'django.contrib.admin',
'django.contrib.admindocs',
'endless_pagination',
'debug_toolbar',
'djangoratings',
'watson',
'web',
)
AUTH_USER_MODEL = 'web.User'
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'formatters': {
'standard': {
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
},
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'null': {
'level':'DEBUG',
'class':'django.utils.log.NullHandler',
},
'logfile': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': "/srv/www/cb/logs/application.log",
'maxBytes': 50000,
'backupCount': 2,
'formatter': 'standard',
},
'console':{
'level':'INFO',
'class':'logging.StreamHandler',
'formatter': 'standard'
},
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'django': {
'handlers':['console'],
'propagate': True,
'level':'WARN',
},
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
'web': {
'handlers': ['console', 'logfile'],
'level': 'DEBUG',
},
},
}
LOGIN_URL = 'login'
LOGOUT_URL = 'logout'
#ENDLESS_PAGINATION_LOADING = """
# <img src="/static/web/img/preloader.gif" alt="loading" style="margin:auto"/>
#"""
ENDLESS_PAGINATION_LOADING = """
<div class="spinner small" style="margin:auto">
<div class="block_1 spinner_block small"></div>
<div class="block_2 spinner_block small"></div>
<div class="block_3 spinner_block small"></div>
</div>
"""
DEBUG_TOOLBAR_CONFIG = {
'INTERCEPT_REDIRECTS': False,
}
import django.template.loader
django.template.loader.add_to_builtins('web.templatetags.cb_tags')
django.template.loader.add_to_builtins('web.templatetags.tag_library')
WATSON_POSTGRESQL_SEARCH_CONFIG = 'public.english_nostop'
Uno de los archivos de configuración:
(cb)clime@den /srv/www/cb/cb/settings $ cat development.py
from base import *
DEBUG = True
TEMPLATE_DEBUG = True
ALLOWED_HOSTS = ['127.0.0.1', '31.31.78.149']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'cwu',
'USER': 'clime',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
MEDIA_ROOT = '/srv/www/cb/media/'
STATIC_ROOT = '/srv/www/cb/static/'
TEMPLATE_DIRS = (
'/srv/www/cb/web/templates',
'/srv/www/cb/templates',
)
Código en manage.py
:
(cb)clime@den /srv/www/cb $ cat manage.py
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cb.settings.development")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
Si añado from base import *
en /srv/www/cb/cb/settings/__init__.py
(que está por lo demás vacío), que mágicamente comienza a trabajar, pero no entiendo por qué. ¿Alguien podría explicarme qué está pasando aquí? Debe ser algo de magia de módulo de Python.
EDITAR: Todo también comienza a funcionar si elimino esta línea de base.py
django.template.loader.add_to_builtins('web.templatetags.cb_tags')
Si elimino esta línea de web.templatetags.cb_tags, también comienza a funcionar:
from endless_pagination.templatetags import endless
Supongo que es porque, al final, conduce a
from django.conf import settings
PER_PAGE = getattr(settings, 'ENDLESS_PAGINATION_PER_PAGE', 10)
Así que crea algunas cosas circulares extrañas y el juego se acaba.
Respuestas:
Tuve el mismo error y resultó ser una dependencia circular entre un módulo o clase cargada por la configuración y el módulo de configuración en sí. En mi caso, era una clase de middleware que se nombró en la configuración que intentó cargar la configuración.
fuente
Me encontré con el mismo problema después de reestructurar la configuración según las instrucciones del libro de Daniel Greenfield Two scoops of Django .
Resolví el problema configurando
en
manage.py
ywsgi.py
.Actualizar:
En la solución anterior,
local
está el nombre del archivo (settings / local.py) dentro de mi carpeta de configuración, que contiene la configuración de mi entorno local.Otra forma de resolver este problema es mantener todas sus configuraciones comunes dentro de settings / base.py y luego crear 3 archivos de configuración separados para sus entornos de producción, preparación y desarrollo.
Su carpeta de configuración se verá así:
y mantenga el siguiente código en su
settings/__init__.py
fuente
local
. En mi caso, la configuración local se mantuvo en el archivo settings / local.pyDJANGO_SETTINGS_MODULE
con una nueva variable de entorno personalizada que no es compatible de forma inmediata y debe tratarse manualmente. Me sorprende que esto tenga tantos votos a favor. Estoy trabajando en un proyecto con esta configuración y nos encontramos con muchos problemas, desde dificultades para configurar un entorno aislado para el desarrollo local hasta bibliotecas externas que se rompen porque esperanDJANGO_SETTINGS_MODULE
que funcione como se esperaba y no lo hace.Tuve el mismo error con
python manage.py runserver
.Para mí, resultó que se debía a un archivo binario compilado (.pyc) obsoleto. Después de eliminar todos esos archivos en mi proyecto, el servidor comenzó a ejecutarse nuevamente. :)
Entonces, si obtiene este error, de la nada, es decir, sin realizar ningún cambio aparentemente relacionado con la configuración de django, esta podría ser una buena primera medida.
fuente
Eliminar archivos .pyc
Comando de terminal de Ubuntu para eliminar .pyc:
find . -name "*.pyc" -exec rm -rf {} \;
Tengo el mismo error cuando hice python manage.py runserver. Fue porque el archivo .pyc. Eliminé el archivo .pyc del directorio del proyecto y luego estaba funcionando.
fuente
find . -type f -name *.pyc -delete
haráNo había especificado el archivo de configuración:
fuente
Comienza a funcionar porque en base.py tienes toda la información necesaria en un archivo de configuración básica. Necesitas la línea:
Entonces funciona y cuando lo hace
from base import *
, importa SECRET_KEY a sudevelopment.py
.Siempre debe importar la configuración básica antes de realizar cualquier configuración personalizada.
EDITAR: Además, cuando django importa el desarrollo de su paquete, inicializa todas las variables dentro de la base desde que definió
from base import *
dentro__init__.py
fuente
Creo que es el error del entorno , deberías intentar configurar:
DJANGO_SETTINGS_MODULE='correctly_settings'
fuente
Tuve el mismo problema con Celery. Mi setting.py antes :
después:
Si las variables de entorno no están definidas, entonces: SECRET_KEY = SU clave de desarrollo
fuente
En el init .py del directorio de configuración, escriba la importación correcta, como:
No es necesario cambiar wsgi.py o manage.py
fuente
Resolví este problema que ocurría en OS X con Django tanto 1.5 como 1.6 desactivando todas las sesiones activas a virtualenv e iniciándolo nuevamente.
fuente
Para cualquiera que use PyCharm: el botón verde "Ejecutar configuración seleccionada" produciría este error, pero ejecutar lo siguiente funciona:
py manage.py runserver 127.0.0.1:8000 --settings=app_name.settings.development
Para solucionar esto, debe editar las variables de entorno de la configuración. Para hacer esto, haga clic en el menú desplegable "Seleccionar configuración de ejecución / depuración" a la izquierda del botón verde de ejecución y luego haga clic en "editar configuración". En la pestaña "entorno", cambie la variable de entorno
DJANGO_SETTINGS_MODULE
aapp_name.settings.development
.fuente
Solo quería agregar que recibí este error cuando el nombre de mi base de datos estaba mal escrito en mi
settings.py
archivo, por lo que no se pudo crear la base de datos.fuente
Resolví este problema en 1.8.4 arreglando la configuración de PLANTILLAS que tenía un error tipográfico (eliminar PLANTILLAS ['depurar'] lo resolvió)
Revise la configuración que ha cambiado recientemente, asegúrese de que todas las claves estén según el libro.
fuente
Para agregar otra posible solución a la mezcla, tenía una
settings
carpeta y unasettings.py
directorio de mi proyecto. (Estaba volviendo a cambiar de archivos de configuración basados en el entorno a un archivo. Desde entonces lo he reconsiderado).Python se estaba confundiendo acerca de si quería importar
project/settings.py
oproject/settings/__init__.py
. Eliminé elsettings
directorio y ahora todo funciona bien.fuente
Resolví este problema eliminando los espacios alrededor de los signos iguales (
=
) en mi.env
archivo.fuente
En mi caso, el problema era que tenía mi
app_folder
ysettings.py
en él. Entonces decidí hacer elSettings folder
interiorapp_folder
- y eso hizo una colisión consettings.py
. Simplemente renombré esoSettings folder
, y todo funcionó.fuente
A mi Mac OS no le gustó que no encontrara la variable env establecida en el archivo de configuración:
pero después de agregar env var a mi entorno de desarrollo local de Mac OS, el error desapareció:
En mi caso, también necesitaba agregar el
--settings
parámetro:donde production.py es un archivo que contiene configuraciones específicas de producción dentro de una carpeta de configuraciones.
fuente
El problema para mí fue llamar
get_text_noop
en el iterable LANGUAGES.Cambiando
a
en el archivo de configuración base resolvió la
ImproperlyConfigured: The SECRET_KEY setting must not be empty
excepción.fuente
Resolví el problema anterior comentando la línea en mi configuración.py
SECRET_KEY
declarado en mi~/.bashrc
archivo (para usuarios de Linux Ubuntu)Para fines de desarrollo en mi máquina local, no usé la variable evironmnet
la línea anterior no dio el error
fuente
En mi caso, mientras configuraba una acción de Github, me olvidé de agregar las variables env al archivo yml:
fuente
La razón por la que hay tantas respuestas diferentes es porque la excepción probablemente no tenga nada que ver con SECRET_KEY. Probablemente sea una excepción anterior la que se esté tragando. Active la depuración usando DEBUG = True para ver la excepción real.
fuente
En mi caso, después de una búsqueda larga, encontré que PyCharm en la configuración de Django (Configuración> Idiomas y marcos> Django) tenía el campo del archivo de configuración indefinido. Debe hacer que este campo apunte al archivo de configuración de su proyecto. Luego, debe abrir la configuración Ejecutar / Depurar y eliminar la variable de entorno DJANGO_SETTINGS_MODULE = ruta existente.
Esto sucede porque el complemento Django en PyCharm fuerza la configuración del marco. Por tanto, no tiene sentido configurar ningún os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'myapp.settings')
fuente
fuente