Saya mencoba menyiapkan beberapa file pengaturan (pengembangan, produksi, ..) yang menyertakan beberapa pengaturan dasar. Tidak bisa berhasil. Ketika saya mencoba menjalankan ./manage.py runserver
saya mendapatkan kesalahan berikut:
(cb)clime@den /srv/www/cb $ ./manage.py runserver
ImproperlyConfigured: The SECRET_KEY setting must not be empty.
Ini adalah modul pengaturan saya:
(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
Pengaturan dasar (berisi 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'
Salah satu file pengaturan:
(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',
)
Kode dalam 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)
Jika saya menambahkan from base import *
ke /srv/www/cb/cb/settings/__init__.py
(yang jika tidak kosong), itu secara ajaib mulai bekerja tetapi saya tidak mengerti mengapa. Ada yang bisa menjelaskan padaku apa yang terjadi di sini? Itu pasti sihir modul python.
EDIT: Semuanya juga mulai berfungsi jika saya menghapus baris ini dari base.py
django.template.loader.add_to_builtins('web.templatetags.cb_tags')
Jika saya menghapus baris ini dari web.templatetags.cb_tags, itu juga mulai berfungsi:
from endless_pagination.templatetags import endless
Saya kira itu karena, pada akhirnya, itu mengarah ke
from django.conf import settings
PER_PAGE = getattr(settings, 'ENDLESS_PAGINATION_PER_PAGE', 10)
Jadi itu menciptakan beberapa hal melingkar yang aneh dan permainan berakhir.
Jawaban:
Saya mengalami kesalahan yang sama dan ternyata itu adalah ketergantungan melingkar antara modul atau kelas yang dimuat oleh pengaturan dan modul pengaturan itu sendiri. Dalam kasus saya itu adalah kelas middleware yang dinamai dalam pengaturan yang mencoba memuat pengaturan itu sendiri.
sumber
Saya mengalami masalah yang sama setelah merestrukturisasi pengaturan sesuai instruksi dari buku Daniel Greenfield Two scoops of Django .
Saya menyelesaikan masalah dengan pengaturan
dalam
manage.py
danwsgi.py
.Memperbarui:
Dalam solusi di atas,
local
adalah nama file (pengaturan / local.py) di dalam folder pengaturan saya, yang menyimpan pengaturan untuk lingkungan lokal saya.Cara lain untuk menyelesaikan masalah ini adalah menyimpan semua pengaturan umum Anda di dalam settings / base.py dan kemudian membuat 3 file pengaturan terpisah untuk lingkungan produksi, pementasan, dan dev.
Folder pengaturan Anda akan terlihat seperti:
dan simpan kode berikut di
settings/__init__.py
sumber
local
. Dalam kasus saya, pengaturan lokal disimpan di pengaturan file / local.pyDJANGO_SETTINGS_MODULE
dengan benar dengan variabel lingkungan kustom baru yang tidak didukung di luar kotak dan harus ditangani secara manual. Saya terkejut ini memiliki begitu banyak suara positif. Saya sedang mengerjakan proyek dengan penyiapan ini dan kami mengalami banyak masalah, mulai dari kesulitan dalam mengonfigurasi lingkungan yang terisolasi untuk pengembangan lokal hingga pustaka eksternal yang rusak karena mereka mengharapkanDJANGO_SETTINGS_MODULE
pekerjaan seperti yang diharapkan dan ternyata tidak.Saya mengalami kesalahan yang sama dengan
python manage.py runserver
.Bagi saya, ternyata itu karena file biner (.pyc) terkompilasi basi. Setelah menghapus semua file seperti itu dalam proyek saya, server mulai berjalan kembali. :)
Jadi jika Anda mendapatkan kesalahan ini, entah dari mana, yaitu tanpa membuat perubahan apa pun yang tampaknya terkait dengan pengaturan-django, ini bisa menjadi langkah pertama yang baik.
sumber
Hapus file .pyc
Perintah terminal Ubuntu untuk menghapus .pyc:
find . -name "*.pyc" -exec rm -rf {} \;
Saya mendapat kesalahan yang sama ketika saya melakukan python manage.py runserver. Itu karena file .pyc. Saya menghapus file .pyc dari direktori proyek kemudian berfungsi.
sumber
find . -type f -name *.pyc -delete
akan dilakukanSaya belum menentukan file pengaturan:
sumber
Ini mulai bekerja karena pada base.py Anda memiliki semua informasi yang diperlukan dalam file pengaturan dasar. Anda membutuhkan garis:
Jadi itu berhasil dan ketika Anda melakukannya
from base import *
, itu mengimpor SECRET_KEY ke Andadevelopment.py
.Anda harus selalu mengimpor pengaturan dasar sebelum melakukan pengaturan khusus.
EDIT: Juga, ketika django mengimpor pengembangan dari paket Anda, itu menginisialisasi semua variabel di dalam basis sejak Anda mendefinisikan
from base import *
di dalamnya__init__.py
sumber
Saya pikir itu adalah kesalahan Lingkungan , Anda harus mencoba mengatur:
DJANGO_SETTINGS_MODULE='correctly_settings'
sumber
Saya memiliki masalah yang sama dengan Celery. Saya setting.py sebelumnya :
setelah:
Jika variabel lingkungan tidak ditentukan maka: SECRET_KEY = kunci pengembangan ANDA
sumber
Di init .py dari direktori pengaturan tulis impor yang benar, seperti:
Tidak perlu mengubah wsgi.py atau manage.py
sumber
Saya memecahkan masalah ini yang terjadi pada OS X dengan Django 1.5 dan 1.6 dengan menonaktifkan semua sesi aktif ke virtualenv dan memulainya lagi.
sumber
Untuk membuang solusi potensial lain ke dalam campuran, saya memiliki
settings
folder dan jugasettings.py
di direktori proyek saya. (Saya beralih kembali dari file pengaturan berbasis lingkungan ke satu file. Saya telah mempertimbangkan kembali.)Python menjadi bingung apakah saya ingin mengimpor
project/settings.py
atauproject/settings/__init__.py
. Saya menghapussettings
dir dan semuanya sekarang berfungsi dengan baik.sumber
Untuk siapa pun yang menggunakan PyCharm: tombol hijau "Jalankan konfigurasi yang dipilih" akan menghasilkan kesalahan ini, namun menjalankan fungsi berikut:
py manage.py runserver 127.0.0.1:8000 --settings=app_name.settings.development
Untuk memperbaikinya, Anda perlu mengedit variabel lingkungan konfigurasi. Untuk melakukannya, klik menu tarik-turun "Pilih konfigurasi run / debug" di sebelah kiri tombol jalankan berwarna hijau, lalu klik "edit konfigurasi". Di bawah tab "lingkungan", ubah variabel lingkungan
DJANGO_SETTINGS_MODULE
menjadiapp_name.settings.development
.sumber
Saya hanya ingin menambahkan bahwa saya mendapat kesalahan ini ketika nama database saya salah dieja di
settings.py
file saya sehingga DB tidak dapat dibuat.sumber
Saya memecahkan masalah ini pada 1.8.4 dengan memperbaiki pengaturan TEMPLATES yang salah ketik (menghapus TEMPLATES ['debug'] menyelesaikannya)
Pergi ke pengaturan yang telah Anda ubah baru-baru ini, pastikan semua kunci berada di dekat buku.
sumber
Saya memecahkan masalah ini dengan menghapus spasi di sekitar tanda yang sama (
=
) di.env
file saya .sumber
Dalam kasus saya, masalahnya adalah - saya memiliki
app_folder
dansettings.py
di dalamnya. Kemudian saya memutuskan untukSettings folder
masukapp_folder
- dan itu membuat benturan dengansettings.py
. Baru saja mengganti namanyaSettings folder
- dan semuanya bekerja.sumber
Mac OS saya tidak suka karena tidak menemukan variabel env yang disetel di file pengaturan:
tetapi setelah menambahkan env var ke lingkungan pengembang Mac OS lokal saya, kesalahan tersebut menghilang:
Dalam kasus saya, saya juga perlu menambahkan
--settings
param:di mana production.py adalah file yang berisi pengaturan khusus produksi di dalam folder pengaturan.
sumber
Masalahnya bagi saya adalah memanggil
get_text_noop
iterable LANGUAGES.Berubah
untuk
di file pengaturan dasar menyelesaikan
ImproperlyConfigured: The SECRET_KEY setting must not be empty
pengecualian.sumber
Saya memecahkan masalah di atas dengan mengomentari baris di my settings.py
SECRET_KEY
dideklarasikan di~/.bashrc
file saya (untuk pengguna linux Ubuntu)Untuk tujuan pengembangan di mesin lokal saya, saya tidak menggunakan variabel evironmnet
baris di atas tidak memberikan kesalahan
sumber
Dalam kasus saya, saat menyiapkan tindakan Github, saya hanya lupa menambahkan variabel env ke file yml:
sumber
Alasan mengapa ada begitu banyak jawaban berbeda adalah karena pengecualiannya mungkin tidak ada hubungannya dengan SECRET_KEY. Ini mungkin pengecualian sebelumnya yang sedang ditelan. Aktifkan debugging menggunakan DEBUG = True untuk melihat pengecualian yang sebenarnya.
sumber
Dalam kasus saya, setelah pencarian yang lama saya menemukan bahwa PyCharm dalam pengaturan Django Anda (Pengaturan> Bahasa & Kerangka kerja> Django) memiliki bidang file konfigurasi tidak ditentukan. Anda harus membuat bidang ini mengarah ke file pengaturan proyek Anda. Kemudian, Anda harus membuka setelan Run / Debug dan menghapus variabel lingkungan DJANGO_SETTINGS_MODULE = jalur yang ada.
Ini terjadi karena plugin Django di PyCharm memaksa konfigurasi kerangka kerja. Jadi tidak ada gunanya mengkonfigurasi os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'myapp.settings')
sumber
sumber
Saya datang ke sini untuk mencari jawaban karena saya menghadapi masalah yang sama, tidak ada jawaban di sini yang berhasil untuk saya. Kemudian setelah mencari di situs web lain saya menemukan perbaikan sederhana ini. Itu berhasil untuk saya
wsgi.py
untuk
sumber