Кажется, моя проблема обсуждалась в предыдущем вопросе здесь , но у нее не было рабочего ответа.
Мне нужно в файле Python WSGI, прежде чем фактически запустить Django, проанализироватьURL, который был вызван, и «прочитал» его, поэтому я могу знать, кто его вызвал, и извлечь из него информацию, которую я могу использовать, чтобы определить, как будет запущено мое приложение Django.
У меня есть приложение, работающее наВиртуальная машина, которая вызывается из нескольких разных URL-адресов, каждый из которых указывает на отдельный файл WSGI, и все они выполняют один и тот же код в Django, но используют разные файлы 'DJANGO_SETTINGS_MODULE'. Различный файл настроек для каждого URL, который вызывает мое приложение. Это устаревший проект, который я не могу изменить. В настоящее время это работает следующим образом:
- User1 обращается к 'user1.example.com'> WSGI устанавливает DJANGO_SETTINGS_MODULE в settings_user1> WSGI запускает Django
- User2 осуществляет доступ 'user2.example.com'> WSGI устанавливает DJANGO_SETTINGS_MODULE в settings_user2> WSGI запускает Django
- User3 осуществляет доступ' user3.example.com '> WSGI устанавливает DJANGO_SETTINGS_MODULE в settings_user3> WSGI запускает Django
* 1016 для 1016 *1015*
1016 *1016* 1016 *1016* 1016 *1016* 1016 *1016* 1016 * 1016 для 101другой WSGI-файл, все запускают один и тот же проект, но устанавливают для переменной соответствующие УСТАНОВКИ.
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings_user1")
application = get_wsgi_application()
Мы уходим из Amazon, где в настоящее время находится наша виртуальная машина, и вместо этого планируем использовать Google AppEngine. , но мы не совсем уверены, как указать другой файл настроек в зависимости от вызываемого URL, если используется один и тот же проект / версия.
Мы можем просто использовать разные версии нашего AppEngine для каждого URL-адреса, а затем назначить URL-адрес «user1-dot-example.appspot.com», жестко запрограммировав файл настроек в wsgi для каждой версии. ... но это потребует запуска разных экземпляров для каждого URL.
Ожидается, что перед запуском приложения Django можно будет получить строку 'user1' при доступе к моему приложению через URL 'user1.example.com'и строку' user2 'при доступе к моему приложению через URL' user2.example.com '(исходный URL, который будет перенаправлен в AppEngine с использованием CloudFlare), поэтому я могу сделать что-то вроде этого:
from django.core.wsgi import get_wsgi_application
url = SOME_CODE_THAT_GETS_THE_URL_HERE()
user = url.split('.example.com')[0]
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings_{}".format(user))
application = get_wsgi_application()
Есть ли в любом случае WSGI может получить URL, который вызвал API? Или, возможно, даже способ для gunicorn передать его в WSGI в переменной, получить переменную '$ URL' и сделать что-то вроде этого:
gunicorn -b :$PORT wsgi:create_app(url=$URL)
Или даже способ получить URL вокружение в app.yaml из AppEngine уже решило бы проблему. Все, что нужно, это иметь переменную до того, как Django будет фактически настроен с DJANGO_SETTINGS_MODULE