Estou tentando configurar vários arquivos de configuração (desenvolvimento, produção, ..) que incluem algumas configurações básicas. Não pode ter sucesso embora. Quando tento executar ./manage.py runserver
estou recebendo o seguinte erro:
(cb)[email protected] /srv/www/cb $ ./ manage.py runserver ImproperlyConfigured: A configuração SECRET_KEY não deve estar vazia.
Aqui está meu módulo de configurações:
(cb)[email protected] /srv/www/cb/cb/settings $ ll total 24 -rw- r-r--. 1 clima clima 8230 2 de outubro 02:56 base.py -rw-rw-r--. 1 clima clima 489 2 de outubro 03:09 development.py -rw-rw-r--. 1 clima clima 24 de outubro 2 02:34 __init__.py -rw-rw-r--. 1 clima clima 471 2 de outubro 02:51 production.py
Configurações básicas (contém SECRET_KEY):
(cb)[email protected] /srv/www /cb/cb/settings $ cat base.py: # Configurações de base do Django para o projeto cb. importe django.conf.global_settings como padrão 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", # Adicione "postgresql_psycopg2", "mysql", "sqlite3" ou "oracle". "ENGINE": "django.db.backends.postgresql_psycopg2", "NAME": "cwu", # Ou caminho para o arquivo de banco de dados se estiver usando sqlite3. "USER": "clima", # Não usado com sqlite3. "PASSWORD": "", # Não usado com sqlite3. "HOST": "", # Definido como string vazia para localhost. Não usado com sqlite3. "PORT": "", # Definido como string vazia por padrão. Não usado com sqlite3. } } # Fuso horário local para esta instalação. As opções podem ser encontradas aqui: # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # embora nem todas as opções possam estar disponíveis em todos os sistemas operacionais. # Em um ambiente Windows, isso deve ser definido para o fuso horário do sistema. TIME_ZONE = "Europa/Praga" # Código do idioma para esta instalação. Todas as opções podem ser encontradas aqui: # http://www.i18nguy.com/unicode/language-identifiers.html LANGUAGE_CODE = "en-us" SITE_ID = 1 # Se você definir isso como False, o Django fará algumas otimizações para não # para carregar o maquinário de internacionalização. USE_I18N = False # Se você definir isso como False, o Django não irá formatar datas, números e # calendários de acordo com a localidade atual. USE_L10N = False # TODO: torne isso verdadeiro e acostume data e hora input DATE_INPUT_FORMATS = defaults.DATE_INPUT_FORMATS + ("%d %b %y", "%d %b, %y") # + ("25 Out 13", " 25 Oct, 13") # Se você definir isso como False, o Django não usará datas com reconhecimento de fuso horário. USE_TZ = True # Caminho absoluto do sistema de arquivos para o diretório que conterá os arquivos enviados pelo usuário. # Exemplo: "/home/media/media.lawrence.com/media/" MEDIA_ROOT = "/srv/www/cb/media" # URL que trata da mídia veiculada por MEDIA_ROOT. Certifique-se de usar uma # barra final. # Exemplos: "http://media.lawrence.com/media/", "http://example.com/media/" MEDIA_URL = "/media/" # Caminho absoluto para o diretório onde os arquivos estáticos devem ser coletados. # Não coloque nada neste diretório você mesmo; armazene seus arquivos estáticos # nos subdiretórios apps" "static/" e em STATICFILES_DIRS. # Exemplo: "/home/media/media.lawrence.com/static/" STATIC_ROOT = "/srv/www/cb/static" # Prefixo de URL para arquivos estáticos. # Exemplo: "http://media.lawrence.com/static/" STATIC_URL = "/static/" # Localizações adicionais de arquivos estáticos STATICFILES_DIRS = ( # Coloque strings aqui, como "/home/html/static" ou "C :/www/django/static". # Sempre use barras, mesmo no Windows. # Não se esqueça de usar caminhos absolutos, não caminhos relativos. ) # Lista de classes localizadoras que sabem como encontrar arquivos estáticos em # vários locais . STATICFILES_FINDERS = ( "django.contrib.staticfiles.finders.FileSystemFinder", "django.contrib.staticfiles.finders.AppDirectoriesFinder", # "django.contrib.staticfiles.finders.DefaultStorageFinder", ) # Torne isso único e não" t compartilhá-lo com ninguém. SECRET_KEY = "8lu*6g0lg)9z!ba+a$ehk)xt)x%rxgb$i1&022shmi1jcgihb*" # Lista de callables que sabem importar templates de várias fontes. 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", # Descomente a próxima linha para proteção simples contra clickjacking: # "django.middleware.clickjacking.XFrameOptionsMiddleware", ) ROOT_URLCONF = "cb.urls" # Caminho pontilhado do Python para o aplicativo WSGI usado pelo runserver do Django. WSGI_APPLICATION = "cb.wsgi.application" TEMPLATE_DIRS = ( # Coloque strings aqui, como "/home/html/django_templates" ou "C:/www/django/templates". # Sempre use barras, mesmo no Windows. # Don "não esqueça de usar caminhos absolutos, não caminhos relativos."/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", # deve ser antes admin "django.contrib.admin", "django.contrib.admindocs", "endless_pagination", "debug_toolbar", "djangoratings", "watson", "web", ) AUTH_USER_MODEL = "web.User" # Um exemplo de configuração de log O único registro tangível # realizado por esta configuração é enviar um e-mail para # os administradores do site em cada erro HTTP 500 quando DEBUG=False. # Veja http://docs.djangoproject.com/en/dev/topics/logging para # mais detalhes sobre como personalizar sua configuração de registro. 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 pequeno"></div> <div class="block_2 spinner_block pequeno"></div> <div class="block_3 spinner_block pequeno"></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"
Um dos arquivos de configuração:
(cb)[email protected] /srv/www/cb/cb/ settings $ cat development.py da importação base * 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 em manage.py
:
(cb)[email protected] /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") de django.core.management import execute_from_command_line execute_from_command_line(sys.argv)
Se eu adicionar da importação base *
em /srv/www/cb/cb/settings/__init__.py
(que de outra forma está vazio), magicamente começa a funcionar, mas não entendo o porquê. Alguém poderia me explicar o que está acontecendo aqui? Deve ser alguma mágica do módulo python.
EDIT: Tudo também começa a funcionar se eu remover esta linha de base.py
django.template.loader.add_to_builtins("web.templatetags.cb_tags")
Se eu remover esta linha de web.templatetags.cb_tags, ela também começa a funcionar:
de infinite_pagination.templatetags import infinite
Acho que é porque, no final, leva a
de django.conf import settings PER_PAGE = getattr(settings, "ENDLESS_PAGINATION_PER_PAGE", 10)
Então ele cria algumas coisas circulares estranhas e game over.