0

У меня есть местные и производственные параметры для моего Джанго приложения, которые импортируют из базы как такпараметров среды в моем Джанго приложений устанавливается отлаживать ложными, но в производстве он действует так, как будто его истинная

from .base import * 

try: 
    from .local import * 
except: 
    pass 

try: 
    from .production import * 
except: 
    pass 

и в моей базе у меня есть

import os 
import dj_database_url 
from .my_pass import SECRET, EMAIL_PASSWORD, EMAIL_USER 

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) 
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 



SECRET_KEY = SECRET 

DEBUG = False 

и в моей местной

import os 
import dj_database_url 
from .my_pass import SECRET 

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) 
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 


SECRET_KEY = SECRET 

DEBUG = True 

и в моем производстве

from django.conf import settings 

if not settings.DEBUG: 
    import os 
    import dj_database_url 


    # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) 
    PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 




    SECRET_KEY = os.environ['SECRET_KEY'] 

    DEBUG = False 

Но когда я тестировал его в производство, делая это

example.com/jnxejnn

он показал мне список URL-адресов, как если бы DEBUG был установлен верно. Почему это?

ответ

1

Посмотрите на порядок файла настроек:

  • первым он импортирует из базы: DEBUG является Ложные
  • затем импортирует из местных: Отладочная Правда
  • затем импортирует из производства: в этот пункт, DEBUG - True, поэтому ваш блок if not settings.DEBUG: никогда не вводится, а DEBUG снова не установлен на False.

Таким образом, DEBUG остается True, так как он установлен в файле локальных настроек.

Я не уверен, что цель вашей проверки if not settings.DEBUG, но я думаю, что если вы устраните это условие, оно будет работать так, как вы ожидаете.

[Редактировать] Хотя выше было ответить на ваш вопрос «Почему?», Это не помогает удовлетворить ваши потребности, поэтому я бы рекомендовал сделать модификацию с вашими настройками файла следующим образом:

from .base import * 

if os.environ['DJANGO_SERVER_TYPE'] == 'local': 
    try: 
     from .local import * 
    except: 
     pass 

if os.environ['DJANGO_SERVER_TYPE'] == 'production': 
    try: 
     from .production import * 
    except: 
     pass 
+0

если я удалю этот блок, то моя локальная разработка не будет вести себя как истина, и я не могу отлаживать. Я следую учебнику. Точка, в которой я даже сделал это, так мне не придется вручную менять По умолчанию true/false каждый раз, когда я git push heroku master – nothingness

+0

Я не уверен, какой учебник вы работаете, но как вы это делаете обязательно приводит к этому условию. Как правило, для определения загружаемого файла настроек вы должны использовать переменную окружения. См. Редактирование моего ответа, что я имею в виду. Затем, чтобы указать, какой файл настроек следует использовать, просто установите соответствующую переменную среды DJANGO_SERVER_TYPE. – Joseph

+0

и удалите if settings.debug в файле production.py? – nothingness

0

в конечном счете, это то, что работает для меня

from .base import * 

if os.getenv('_system_name') == 'OSX': 
    from .local import * 

else: 
    from .production import * 

Я не понимаю, почему учебники сделать это настолько сложным. Я запустил printenv, чтобы посмотреть на переменные, которые я создавал, и попытаться понять, почему они не работают.Я заметил

_system_name=OSX 

и думал, что я мог бы использовать это, потому что мы надеемся, Heroku не имеют такое же имя для своего сервера

в то же время в одном из моих хромированными вкладок (у меня было несколько открытых вкладок искали ответ) Я смотрел на пост о том, как использовать переменные окружения, потому что это

os.environ['DJANGO_SERVER_TYPE'] == 'production' 

продолжал давать мне эту ошибку

File "/Users/ray/Desktop/myheroku/practice/src/gettingstarted/settings/__init__.py", line 3, in <module> 
if os.environ['DJANGO_SERVER_TYPE'] == 'local': 
File "/Users/ray/Desktop/myheroku/practice/bin/../lib/python3.5/os.py", line 683, in __getitem__ 
raise KeyError(key) from None 
KeyError: 'DJANGO_SERVER_TYPE' 

так что я видел кого-то с помощью этого

os.getenv('TAG') 

и полагал, что я мог бы использовать его как этот

os.getenv('_system_name') == 'OSX' 

и теперь мои местные дела, как это предполагается, и мои производственные работы, как это предполагается. Я в настоящее время пытаюсь получить эту работу

from .base import * 
try: 
    from .local import * 
except: 
    pass 

try: 
    from .production import * 
except: 
    pass 

, который я искал советы по и пытаюсь сделать работу в течение последних 3-х дней. Если мое решение не подходит, пожалуйста, дайте мне знать, почему это не так. но по состоянию на данный момент он работает