J'essaye de mettre en place plusieurs fichiers de configuration (développement, production, ..) qui incluent certains paramètres de base. Impossible de réussir cependant. Lorsque j'essaye de courir ./manage.py runserver
, j'obtiens l'erreur suivante:
(cb)clime@den /srv/www/cb $ ./manage.py runserver
ImproperlyConfigured: The SECRET_KEY setting must not be empty.
Voici mon module de paramètres:
(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
Paramètres de base (contiennent 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'
Un des fichiers de paramètres:
(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',
)
Code 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 j'ajoute from base import *
dans /srv/www/cb/cb/settings/__init__.py
(qui est autrement vide), cela commence par magie à fonctionner mais je ne comprends pas pourquoi. N'importe qui pourrait m'expliquer ce qui se passe ici? Ce doit être une magie du module python.
EDIT: Tout commence également à fonctionner si je supprime cette ligne de base.py
django.template.loader.add_to_builtins('web.templatetags.cb_tags')
Si je supprime cette ligne de web.templatetags.cb_tags, cela commence également à fonctionner:
from endless_pagination.templatetags import endless
Je suppose que c'est parce que, à la fin, cela conduit à
from django.conf import settings
PER_PAGE = getattr(settings, 'ENDLESS_PAGINATION_PER_PAGE', 10)
Cela crée donc des trucs circulaires étranges et le jeu est terminé.
Réponses:
J'ai eu la même erreur et il s'est avéré qu'il s'agissait d'une dépendance circulaire entre un module ou une classe chargé par les paramètres et le module de paramètres lui-même. Dans mon cas, c'était une classe middleware nommée dans les paramètres qui tentait elle-même de charger les paramètres.
la source
J'ai rencontré le même problème après avoir restructuré les paramètres selon les instructions du livre de Daniel Greenfield Two scoops of Django .
J'ai résolu le problème en définissant
dans
manage.py
etwsgi.py
.Mettre à jour:
Dans la solution ci-dessus,
local
est le nom de fichier (settings / local.py) dans mon dossier de paramètres, qui contient les paramètres de mon environnement local.Une autre façon de résoudre ce problème consiste à conserver tous vos paramètres courants dans settings / base.py, puis à créer 3 fichiers de paramètres distincts pour vos environnements de production, de préparation et de développement.
Votre dossier de paramètres ressemblera à ceci:
et conservez le code suivant dans votre
settings/__init__.py
la source
local
. Dans mon cas, les paramètres locaux ont été conservés dans le fichier settings / local.pyDJANGO_SETTINGS_MODULE
par une nouvelle variable d'environnement personnalisée qui n'est pas prise en charge par défaut et doit être traitée manuellement. Je suis surpris qu'il y ait autant de votes positifs. Je travaille sur un projet avec cette configuration et nous rencontrons beaucoup de problèmes, des difficultés de configuration d'un environnement isolé pour le développement local à la rupture des bibliothèques externes car ils s'attendent à ce que leDJANGO_SETTINGS_MODULE
fonctionne comme prévu et ce n'est pas le cas.J'ai eu la même erreur avec
python manage.py runserver
.Pour moi, il s'est avéré que c'était à cause d'un fichier binaire compilé (.pyc) périmé. Après avoir supprimé tous ces fichiers dans mon projet, le serveur a recommencé à fonctionner. :)
Donc, si vous obtenez cette erreur, de nulle part, c'est-à-dire sans faire aucun changement apparemment lié aux paramètres de django, cela pourrait être une bonne première mesure.
la source
Supprimer les fichiers .pyc
Commande de terminal Ubuntu pour supprimer .pyc:
find . -name "*.pyc" -exec rm -rf {} \;
J'ai la même erreur quand j'ai fait python manage.py runserver. C'était parce que le fichier .pyc. J'ai supprimé le fichier .pyc du répertoire du projet, puis cela fonctionnait.
la source
find . -type f -name *.pyc -delete
va faireJe n'avais pas spécifié le fichier de paramètres:
la source
Cela commence à fonctionner car sur base.py vous avez toutes les informations nécessaires dans un fichier de paramètres de base. Vous avez besoin de la ligne:
Cela fonctionne donc et lorsque vous le faites
from base import *
, il importe SECRET_KEY dans votre fichierdevelopment.py
.Vous devez toujours importer les paramètres de base avant d'effectuer des paramètres personnalisés.
EDIT: De plus, lorsque django importe le développement de votre package, il initialise toutes les variables à l'intérieur de base depuis que vous avez défini à l'
from base import *
intérieur__init__.py
la source
Je pense que c'est l' erreur d'environnement , vous devriez essayer de définir:
DJANGO_SETTINGS_MODULE='correctly_settings'
la source
J'ai eu le même problème avec le céleri. Mon setting.py avant :
après:
Si les variables d'environnement ne sont pas définies alors: SECRET_KEY = VOTRE clé de développement
la source
Dans le fichier init .py du répertoire des paramètres, écrivez l'importation correcte, comme:
Pas besoin de changer wsgi.py ou manage.py
la source
J'ai résolu ce problème survenant sur OS X avec Django à la fois 1.5 et 1.6 en désactivant toutes les sessions actives sur virtualenv et en le redémarrant.
la source
Pour toute personne utilisant PyCharm: le bouton vert "Exécuter la configuration sélectionnée" produirait cette erreur, tout en exécutant les travaux suivants:
py manage.py runserver 127.0.0.1:8000 --settings=app_name.settings.development
Pour résoudre ce problème, vous devez modifier les variables d'environnement de la configuration. Pour ce faire, cliquez sur le menu déroulant "Sélectionner la configuration d'exécution / débogage" à gauche du bouton d'exécution vert puis cliquez sur "Modifier la configuration". Sous l'onglet "environnement", changez la variable d'environnement
DJANGO_SETTINGS_MODULE
enapp_name.settings.development
.la source
Je voulais juste ajouter que j'avais cette erreur lorsque le nom de ma base de données était mal orthographié dans mon
settings.py
fichier afin que la base de données ne puisse pas être créée.la source
J'ai résolu ce problème sur 1.8.4 en corrigeant les paramètres TEMPLATES qui avaient une faute de frappe (la suppression de TEMPLATES ['debug'] l'a résolu)
Passez en revue les paramètres que vous avez modifiés récemment, assurez-vous que toutes les clés sont à la lettre.
la source
Pour jeter une autre solution potentielle dans le mix, j'avais un
settings
dossier ainsi qu'unsettings.py
dans mon répertoire de projet. (Je revenais des fichiers de paramètres basés sur l'environnement à un fichier. J'ai reconsidéré depuis.)Python commençait à ne pas savoir si je voulais importer
project/settings.py
ouproject/settings/__init__.py
. J'ai supprimé lesettings
répertoire et tout fonctionne maintenant correctement.la source
J'ai résolu ce problème en supprimant les espaces autour des signes égaux (
=
) dans mon.env
fichier.la source
Dans mon cas, le problème était - j'avais mon
app_folder
etsettings.py
dedans. Puis j'ai décidé de faire à l'Settings folder
intérieurapp_folder
- et cela a fait une collision avecsettings.py
. Je viens de renommer celaSettings folder
- et tout a fonctionné.la source
Mon Mac OS n'a pas aimé le fait qu'il ne trouve pas la variable d'environnement définie dans le fichier de paramètres:
mais après avoir ajouté le var env à mon environnement de développement Mac OS local, l'erreur a disparu:
Dans mon cas, j'avais également besoin d'ajouter le
--settings
paramètre:où production.py est un fichier contenant des paramètres spécifiques à la production dans un dossier de paramètres.
la source
Le problème pour moi était d'appeler
get_text_noop
les LANGUES itérables.En changeant
à
dans le fichier des paramètres de base a résolu l'
ImproperlyConfigured: The SECRET_KEY setting must not be empty
exception.la source
J'ai résolu le problème ci-dessus en commentant la ligne dans mon settings.py
SECRET_KEY
déclaré dans mon~/.bashrc
fichier (pour les utilisateurs Linux Ubuntu)À des fins de développement sur ma machine locale, je n'ai pas utilisé la variable evironmnet
au-dessus de la ligne n'a pas donné l'erreur
la source
Dans mon cas, lors de la configuration d'une action Github, j'ai simplement oublié d'ajouter les variables env au fichier yml:
la source
La raison pour laquelle il y a tant de réponses différentes est que l'exception n'a probablement rien à voir avec SECRET_KEY. C'est probablement une exception antérieure qui est en train d'être avalée. Activez le débogage en utilisant DEBUG = True pour voir l'exception réelle.
la source
Dans mon cas, après une longue recherche, j'ai trouvé que PyCharm dans vos paramètres Django (Paramètres> Langues et cadres> Django) avait le champ du fichier de configuration non défini. Vous devez faire en sorte que ce champ pointe vers le fichier de paramètres de votre projet. Ensuite, vous devez ouvrir les paramètres Exécuter / Déboguer et supprimer la variable d'environnement DJANGO_SETTINGS_MODULE = chemin existant.
Cela se produit car le plugin Django dans PyCharm force la configuration du framework. Il est donc inutile de configurer un os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'myapp.settings')
la source
la source