erro apache mod_wsgi com django em virtualenv

Eu não consigo encontrar uma boa resposta para isso. Quem precisa possuir o virtualenv ao executá-lo como um WSGIDaemon? Eu assumo no meu sistema operacional (Ubuntu 16) www-data, mas eu quero ter certeza. Tentando algumas coisas novas para fazer essa coisa funcionar com base na resposta deste post …

configuração do django apache com o WSGIDaemonProcess não funcionando

O projeto django, a pasta virtualenv ou ambos precisam pertencer ao grupo apache? Quais propriedades precisam estar no lugar para servir um projeto de django sem especificar uma porta? Por que recebo o seguinte?

O problema da raiz:

Call to 'site.addsitedir()' failed for '(null)' 

Quando eu começo o apache, recebo este erro. Eu segui vários guias diferentes, incluindo: http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html e https://docs.djangoproject.com/en/1.10/howto/ implantação / wsgi / modwsgi / mas tiveram zero sucesso.

Meu caminho do ambiente virtual é /usr/local/virtualenvs/servicesite

Meu caminho de projeto do django é /home/addohm/projects/rtservice/servicesite é onde reside o manage.py , que deixa o /home/addohm/projects/rtservice/servicesite/servicesite como o local do meu wsgi.py.

wsgi.py:

 SERVICESITE = ['/usr/local/virtualenvs/servicesite/lib/python3.5/site-packages'] import os import sys import site prev_sys_path = list(sys.path) for directory in SERVICESITE site.addsitedir(directory) new_sys_path = [] for item in list(sys.path): if item not in prev_sys_path: new_sys_path.append(item) sys.path.remove(item) sys.path[:0] = new_sys_path """ **Doesn't seem to work, throwing error in apache logs** site.addsitedir('/usr/local/virtualenvs/servicesite/lib/python3.5/site-packages') """ from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "servicesite.settings") application = get_wsgi_application() DJANGO_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)), '..') sys.path.append(DJANGO_PATH) 

apache2.conf

[…]

 WSGIDaemonProcess servicesite python-path=/home/addohm/projects/rtservice/servicesite:/usr/local/virtualenvs/servicesite/lib/python3.5/site-packages WSGIProcessGroup servicesite WSGIScriptAlias / /home/addohm/projects/rtservice/servicesite/servicesite/wsgi.py Alias /static/ /home/addohm/projects/rtservice/servicesite/static/  Require all granted    Require all granted   

[…]

Você não deve precisar alterar nada no wsgi.py original gerado pelo Django para você. Geralmente é suficiente ter:

 import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "servicesite.settings") application = get_wsgi_application() 

Sua configuração do Apache deve ser preferencialmente:

 WSGIDaemonProcess service site python-home=/usr/local/virtualenvs/servicesite \ python-path=/home/addohm/projects/rtservice/servicesite WSGIProcessGroup servicesite WSGIScriptAlias / /home/addohm/projects/rtservice/servicesite/servicesite/wsgi.py Alias /static/ /home/addohm/projects/rtservice/servicesite/static/  Require all granted    Require all granted   

Ou seja, use python-home para o local do diretório especificado por sys.prefix para o ambiente virtual. Evite usar python-path e referindo-se ao diretório site-packages . Usar o python-home tem sido o caminho preferido por um longo tempo e usá-lo garante que as coisas falhem de uma maneira mais óbvia quando você não faz as coisas da maneira correta.

Algumas coisas muito importantes.

A primeira é que o mod_wsgi deve ser compilado para a versão principal / secundária específica do Python que você deseja usar.

Segundo, o ambiente virtual do Python deve ser criado a partir da mesma instalação do Python à qual o mod_wsgi foi compilado. Você não pode ter o mod_wsgi compilado em uma instalação do sistema Python, mas tenha seu ambiente virtual baseado em uma instalação separada do Python para a mesma versão principal / secundária em /usr/local .

Terceiro, o usuário que o Apache executa seu código como deve ter access de leitura a quaisquer diretórios / arquivos para a instalação principal do Python, o ambiente virtual e o código do seu aplicativo. Quando você cola coisas em um diretório pessoal, geralmente não terá access, pois o diretório pessoal proíbe que outras pessoas leiam qualquer coisa no diretório inicial.

Quarto, se o grupo de processos do daemon mod_wsgi estiver configurado para ser executado como um usuário diferente do usuário do Apache, o usuário do Apache ainda deve ter pelo menos a capacidade de ler o arquivo wsgi.py e todos os diretórios até esse ponto.

Outras leituras sobre ambientes virtuais mais atualizados:

    Intereting Posts