Pergunta

Eu quero servir feeds RSS especializados em um subdomínio diferente do resto do site.

Posso usar o framework sites para usar um urls.py diferente e arquivo settings.py em uma única instância do Django . ou que eu preciso para configurar dois apache locais e apenas definir os diferentes arquivos de settings.py no conf apache.

A razão que eu preciso configurar dois arquivos urls.py é evitar conteúdo duplicado. Eu não quero que o site principal para estar disponível em rss.example.com e eu não quero que os alimentos especializados para ser acessível em example.com

Servindo-los de uma única instância do Django seria ideal porque estamos em hospedagem compartilhada com a memória limitada, e parece um desperdício ter um aberto instância que só serve rss.

Editar : concluí que várias instâncias com arquivos urls.py separadas seria mais fácil para mim ... mas eu encontrei este artigo que descreve como fazê-lo usando uma única instância:

http://effbot.org/zone/django-multihost.htm

Solução: Django tupperware

Acabei escrevendo um quadro para a execução de várias cópias de um site em uma única instância do Django.

A idéia básica é mudar a configuração SITE_ID on the fly para cada solicitação e carregar configurações alternativas a partir do banco de dados. Ele faz isso com base em domínio e usos SITE_ID = 1 por padrão (quando não pode encontrar qualquer coisa)

Todas as configurações no ato arquivo settings.py como padrões que são substituídas pelas configurações armazenadas no banco de dados para o site atual.

Ele funciona muito bem :) e ele está correndo na produção em http://rootbuzz.com

Foi útil?

Solução

Com estoque Django você deve ter um settings.py única para cada site ... porque o SITE_ID é definida em settings.py e é a chave para o site que está a lidar com este pedido.

Em outras palavras, SITE_ID é global para sua instância e, portanto, você precisa de uma instância para cada site.

Você pode ter um urls.py comum se desejar porque não há nada impedindo que você use o mesmo ROOT_URLCONF em todos os seus arquivos local settings.py ... ou você pode ter um diffent para cada site. Neste caso, você gostaria de incluir URLs sub para evitar repetir-se por quaisquer URLs comuns.

Há pelo menos dois métodos que você pode tentar servir a partir de uma única instância:

  1. Use apache + mod_wsgi e usar o WSGIApplicationGroup e / ou WSGIProcessGroup directivas. Eu nunca precisei estes antes, portanto, não pode ser completamente certo que estes irão trabalhar da maneira que quiser, mas independentemente disso você pode definitivamente usar mod_wsgi no modo daemon para melhorar significativamente a sua pegada de memória.

  2. Você pode jogar com Django middleware para negar / permitir que URLs com base no nome do host pedido (ver HttpRequest.get_host () na documentação do Django). Para essa matéria, mesmo que seria uma pequena queda de performance, você pode colocar um decorador em todos os seus pontos de vista que verifica o host de entrada.

Outras dicas

FYI - Eu liberei django-dynamicsites que podem ser úteis com esta questão - https: // bitbucket .org / uysrc / django-dynamicsites / src

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top