Ich versuche, mehrere Einstellungsdateien (Entwicklung, Produktion usw.) einzurichten, die einige Grundeinstellungen enthalten. Kann aber nicht gelingen. Wenn ich versuche zu laufen, erhalte ./manage.py runserver
ich die folgende Fehlermeldung:
(cb)clime@den /srv/www/cb $ ./manage.py runserver
ImproperlyConfigured: The SECRET_KEY setting must not be empty.
Hier ist mein Einstellungsmodul:
(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
Basiseinstellungen (enthalten 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'
Eine der Einstellungsdateien:
(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 in 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)
Wenn ich hinzufügen from base import *
in /srv/www/cb/cb/settings/__init__.py
(was sonst leer ist ), beginnt es auf magische Weise zu arbeiten , aber ich verstehe nicht , warum. Kann mir jemand erklären, was hier los ist? Es muss etwas Python-Modul-Magie sein.
BEARBEITEN: Alles beginnt auch zu funktionieren, wenn ich diese Zeile aus base.py entferne
django.template.loader.add_to_builtins('web.templatetags.cb_tags')
Wenn ich diese Zeile aus web.templatetags.cb_tags entferne, funktioniert sie auch:
from endless_pagination.templatetags import endless
Ich denke, das liegt daran, dass es am Ende dazu führt
from django.conf import settings
PER_PAGE = getattr(settings, 'ENDLESS_PAGINATION_PER_PAGE', 10)
So schafft es einige seltsame kreisförmige Sachen und Spiel vorbei.
Antworten:
Ich hatte den gleichen Fehler und es stellte sich heraus, dass es sich um eine zirkuläre Abhängigkeit zwischen einem von den Einstellungen geladenen Modul oder einer Klasse und dem Einstellungsmodul selbst handelt. In meinem Fall war es eine Middleware-Klasse, die in den Einstellungen benannt wurde und selbst versuchte, die Einstellungen zu laden.
quelle
Nach der Umstrukturierung der Einstellungen gemäß den Anweisungen aus Daniel Greenfields Buch Two scoops of Django stieß ich auf dasselbe Problem .
Ich habe das Problem durch Einstellen behoben
in
manage.py
undwsgi.py
.Aktualisieren:
In der obigen Lösung
local
befindet sich der Dateiname (settings / local.py) in meinem Einstellungsordner, der die Einstellungen für meine lokale Umgebung enthält.Eine andere Möglichkeit, dieses Problem zu beheben, besteht darin, alle allgemeinen Einstellungen in settings / base.py beizubehalten und anschließend drei separate Einstellungsdateien für Ihre Produktions-, Staging- und Entwicklungsumgebungen zu erstellen.
Ihr Einstellungsordner sieht folgendermaßen aus:
und behalten Sie den folgenden Code in Ihrem
settings/__init__.py
quelle
local
. In meinem Fall wurden die lokalen Einstellungen in der Datei settings / local.pyDJANGO_SETTINGS_MODULE
durch eine neue benutzerdefinierte Umgebungsvariable, die nicht sofort unterstützt wird und manuell behandelt werden muss. Ich bin überrascht, dass dies so viele positive Stimmen hat. Ich arbeite an einem Projekt mit diesem Setup und wir stoßen auf viele Probleme, von Schwierigkeiten bei der Konfiguration einer isolierten Umgebung für die lokale Entwicklung bis hin zum Ausfall externer Bibliotheken, weil sie erwarten, dass dieDJANGO_SETTINGS_MODULE
wie erwartet funktionieren und dies nicht.Ich hatte den gleichen Fehler mit
python manage.py runserver
.Für mich stellte sich heraus, dass es sich um eine veraltete kompilierte Binärdatei (.pyc) handelte. Nachdem alle diese Dateien in meinem Projekt gelöscht wurden, wurde der Server erneut ausgeführt. :) :)
Wenn Sie diesen Fehler aus dem Nichts erhalten, dh ohne Änderungen vorzunehmen, die scheinbar mit den Django-Einstellungen zusammenhängen, könnte dies eine gute erste Maßnahme sein.
quelle
Entfernen Sie .pyc-Dateien
Ubuntu-Terminalbefehl zum Löschen von .pyc:
find . -name "*.pyc" -exec rm -rf {} \;
Ich habe den gleichen Fehler, als ich python manage.py runserver gemacht habe. Es war weil .pyc-Datei. Ich habe die .pyc-Datei aus dem Projektverzeichnis gelöscht, dann hat es funktioniert.
quelle
find . -type f -name *.pyc -delete
wird tunIch hatte die Einstellungsdatei nicht angegeben:
quelle
Es funktioniert, weil Sie auf der base.py alle erforderlichen Informationen in einer Grundeinstellungsdatei haben. Sie benötigen die Zeile:
So funktioniert es und wenn Sie dies tun
from base import *
, importiert es SECRET_KEY in Ihredevelopment.py
.Sie sollten immer die Grundeinstellungen importieren, bevor Sie benutzerdefinierte Einstellungen vornehmen.
EDIT: Auch wenn django Importe Entwicklung von Ihrem Paket, es alle Variablen innerhalb Basis initialisiert , da Sie definiert im
from base import *
Inneren__init__.py
quelle
Ich denke, dass es der Umgebungsfehler ist , sollten Sie versuchen, Folgendes einzustellen:
DJANGO_SETTINGS_MODULE='correctly_settings'
quelle
Ich hatte das gleiche Problem mit Sellerie. Meine Einstellung.py vor :
nach dem:
Wenn die Umgebungsvariablen nicht definiert sind, gilt Folgendes: SECRET_KEY = IHR Entwicklungsschlüssel
quelle
Schreiben Sie in die Init .py des Einstellungsverzeichnisses den richtigen Import wie:
Sie müssen wsgi.py oder manage.py nicht ändern
quelle
Ich habe dieses unter OS X mit Django 1.5 und 1.6 auftretende Problem gelöst, indem ich alle aktiven Sitzungen für virtualenv deaktiviert und erneut gestartet habe.
quelle
Für alle Benutzer von PyCharm: Die grüne Schaltfläche "Ausgewählte Konfiguration ausführen" führt zu diesem Fehler, führt jedoch die folgenden Schritte aus:
py manage.py runserver 127.0.0.1:8000 --settings=app_name.settings.development
Um dies zu beheben, müssen Sie die Umgebungsvariablen der Konfiguration bearbeiten. Klicken Sie dazu auf das Dropdown-Menü "Run / Debug-Konfiguration auswählen" links neben der grünen Run-Schaltfläche und dann auf "Konfiguration bearbeiten". Ändern Sie auf der Registerkarte "Umgebung" die Umgebungsvariable
DJANGO_SETTINGS_MODULE
inapp_name.settings.development
.quelle
Ich wollte nur hinzufügen, dass ich diesen Fehler erhalten habe, als mein Datenbankname in meiner
settings.py
Datei falsch geschrieben wurde, sodass die Datenbank nicht erstellt werden konnte.quelle
Ich habe dieses Problem in 1.8.4 gelöst, indem ich die TEMPLATES-Einstellungen behoben habe, bei denen ein Tippfehler aufgetreten ist (das Entfernen von TEMPLATES ['debug'] hat das Problem behoben).
Gehen Sie die Einstellungen durch, die Sie kürzlich geändert haben, und stellen Sie sicher, dass alle Schlüssel buchstäblich sind.
quelle
Um eine weitere mögliche Lösung in den Mix zu werfen, hatte ich einen
settings
Ordner sowie einsettings.py
in meinem Projektverzeichnis. (Ich habe von umgebungsbasierten Einstellungsdateien zu einer Datei zurückgeschaltet. Ich habe es seitdem überdacht.)Python war verwirrt darüber, ob ich importieren wollte
project/settings.py
oderproject/settings/__init__.py
. Ich habe dassettings
Verzeichnis entfernt und jetzt funktioniert alles einwandfrei.quelle
Ich habe dieses Problem gelöst, indem ich die Leerzeichen um Gleichheitszeichen (
=
) in meiner.env
Datei entfernt habe.quelle
In meinem Fall war das Problem - ich hatte mein
app_folder
undsettings.py
drin. Dann entschied ich mich zu machenSettings folder
innenapp_folder
- und dass eine Kollision gemacht mitsettings.py
. Einfach umbenanntSettings folder
- und alles hat funktioniert.quelle
Mein Mac OS mochte es nicht, dass es die in der Einstellungsdatei festgelegte env-Variable nicht gefunden hat:
Nach dem Hinzufügen der env var zu meiner lokalen Mac OS-Entwicklungsumgebung verschwand der Fehler:
In meinem Fall musste ich auch den
--settings
Parameter hinzufügen :Dabei ist Production.py eine Datei mit produktionsspezifischen Einstellungen in einem Einstellungsordner.
quelle
Das Problem für mich war,
get_text_noop
die iterierbaren SPRACHEN aufzurufen.Ändern
zu
In der Basiseinstellungsdatei wurde die
ImproperlyConfigured: The SECRET_KEY setting must not be empty
Ausnahme behoben .quelle
Ich habe das obige Problem gelöst, indem ich die Zeile in meiner settings.py kommentiert habe
SECRET_KEY
in meiner~/.bashrc
Datei deklariert (für Linux Ubuntu Benutzer)Für Entwicklungszwecke auf meiner lokalen Maschine habe ich keine evironmnet-Variable verwendet
Die obige Zeile gab den Fehler nicht an
quelle
In meinem Fall habe ich beim Einrichten einer Github-Aktion nur vergessen, die env-Variablen zur yml-Datei hinzuzufügen:
quelle
Der Grund, warum es so viele verschiedene Antworten gibt, ist, dass die Ausnahme wahrscheinlich nichts mit SECRET_KEY zu tun hat. Es ist wahrscheinlich eine frühere Ausnahme, die verschluckt wird. Aktivieren Sie das Debuggen mit DEBUG = True, um die tatsächliche Ausnahme anzuzeigen.
quelle
In meinem Fall stellte ich nach langer Suche fest, dass bei PyCharm in Ihren Django-Einstellungen (Einstellungen> Sprachen & Frameworks> Django) das Konfigurationsdateifeld undefiniert war. Sie sollten dieses Feld auf die Einstellungsdatei Ihres Projekts verweisen lassen. Anschließend müssen Sie die Run / Debug-Einstellungen öffnen und die Umgebungsvariable DJANGO_SETTINGS_MODULE = vorhandener Pfad entfernen.
Dies geschieht, weil das Django-Plugin in PyCharm die Konfiguration des Frameworks erzwingt. Es macht also keinen Sinn, os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'myapp.settings') zu konfigurieren.
quelle
quelle