Самый оптимальный способ программно проверить, работает ли сайт локально или на сервере с Django? - PullRequest
2 голосов
/ 19 февраля 2010

В настоящее время у меня есть это в моем settings.py файле:

DEBUG = True
LOCAL = True
TEMPLATE_DEBUG = DEBUG

SITE_TITLE = 'Stack Overflow Question'

REMOTE_SITE_URL = "http://************:8080"
LOCAL_SITE_URL  = "http://************:8000"

ADMINS = (
    # ('Your Name', 'your_email@domain.com'),
)

MANAGERS = ADMINS

if LOCAL:
    SITE_URL = LOCAL_SITE_URL
    ROOT_URL = '/mnt/hgfs/Sites/************'
    engine = 'sqlite3'
    dbName = '************.db'
    dbUser = ''
    dbPassword = ''
    dbHost = ''
    dbPort = ''
else:
    SITE_URL = REMOTE_SITE_URL
    ROOT_URL = '/var/www/vhosts/www.*************.com/public/'
    engine = 'mysql'
    dbName = '************'
    dbUser = 'www-data'
    dbPassword = '************'
    dbHost = ''
    dbPort = ''

Идея состоит в том, что если я изменю LOCAL=True на false, я могу переключаться между базой данных sqlite3 и mysqlэто хранится на сервере.Но это громоздко при использовании SVN.Что мне нужно, так это возможность settings.py разумно знать, находится ли он на сервере или работает локально.Есть ли способ узнать URL, IP или просто проверить файл, который существует на сервере, а не локально?Я не только ищу решение, но и не облагаю налогом сервер.Проверка существования файла может быть довольно сложной, если она происходит каждый раз, когда Django отображает страницу.Есть предложения?

1 Ответ

5 голосов
/ 19 февраля 2010

Проверка наличия файла не будет происходить каждый раз при рендеринге.На самом деле это произойдет только при запуске процесса интерпретатора, что зависит от конфигурации вашего развертывания.Это будет зависеть от различных настроек вашего веб-сервера, но если вы используете apache, главным образом MaxRequestPerChild и StartServers и связанные параметры.Например, если у меня есть

StartServers 8
MaxrequestsPerChild 4000

в предварительно разветвленном Apache, я протестирую этот файл для первых 8 запросов, прослушаю еще 32 000 запросов, затем протестирую этот файл еще 8 раз.(Да, я знаю, что это намного сложнее, чем это.)

Дело в том, что большинство реализаций, которые загружают ваш код, не будут часто повторно получать файл settings.py.Имея это в виду, как насчет:

import os
if os.uname()[1] == 'my.development.server.com':
    LOCAL = True
else:
    LOCAL = False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...