Джанго с витой паутиной - wgi и vhost - PullRequest
1 голос
/ 27 августа 2010

У меня есть проект с настройкой каталога, такой как:

myproject
  someapp
  sites
      foo
         settings.py - site specific 
  settings.py - global

Я использую twisted web.wsgi для обслуживания этого проекта. Проблема, с которой я сталкиваюсь, заключается в настройке правильной среды.

import sys
import os
from twisted.application import internet, service
from twisted.web import server, resource, wsgi, static, vhost
from twisted.python import threadpool
from twisted.internet import reactor
from django.core.handlers.wsgi import WSGIHandler
from  django.core.management import setup_environ,ManagementUtility
sys.path.append(os.path.abspath("."))
sys.path.append(os.path.abspath("../"))
DIRNAME= os.path.dirname(__file__)
SITE_OVERLOADS = os.path.join(DIRNAME,'sites')

def import_module(name):
 mod = __import__(name)
 components = name.split('.')
 for comp in components[1:]:
  mod = getattr(mod,comp)
 return mod
def buildServer():
 hosts = [d for d in os.listdir(SITE_OVERLOADS) if not os.path.isfile(d) and d != ".svn"]
 root = vhost.NameVirtualHost()
 pool = threadpool.ThreadPool()
 pool.start()
 reactor.addSystemEventTrigger('after', 'shutdown', pool.stop)

 for host in hosts:
  settings = os.path.join(SITE_OVERLOADS,"%s/settings.py" % host)
  if os.path.exists(settings):
   sm = "myproject.sites.%s.settings" % host
   settings_module = import_module(sm)
   domain = settings_module.DOMAIN
   setup_environ(settings_module)
   utility = ManagementUtility()
   command = utility.fetch_command('runserver')
   command.validate()
   wsgi_resource = wsgi.WSGIResource(reactor,pool,WSGIHandler())
   root.addHost(domain,wsgi_resource)
 return root

root = buildServer()
site = server.Site(root)
application = service.Application('MyProject')
sc = service.IServiceCollection(application)
i = internet.TCPServer(8001, site)
i.setServiceParent(sc)

Я пытаюсь настроить vhosts для каждого сайта, у которого есть модуль настроек в подкаталоге "sites". Однако, похоже, что настройки доступны для каждого сайта.

Ответы [ 2 ]

1 голос
/ 27 августа 2010

Проекты Django в одном и том же процессе Python будут иметь одинаковые настройки.Вам нужно будет порождать их как отдельные процессы, чтобы использовать отдельные модули настроек.

0 голосов
/ 28 августа 2010

Поскольку ваша цель - создать кучу виртуальных хостов без общего доступа, вы, вероятно, не выиграете от попыток настроить свои процессы каким-либо иным способом, кроме как самым простым.Итак, как насчет изменения файла .tac для запуска сервера для одного виртуального хоста, запуска множества экземпляров (вручную, с помощью сценария оболочки, с помощью другого простого сценария Python и т. Д.), А затем установки обратного прокси-сервера (nginx, Apache, даже другой процесс Twisted Web) перед всеми этими процессами?

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

...