Configurando variáveis de ambiente em mod_wsgi para Django

2

Estou executando o Django em uma instância do RHEL sob Apache / mod_wsgi, e estou tendo problemas para definir algumas variáveis de ambiente para o processo Python. Todos os componentes (Apache, Python, mod_wsgi, bibliotecas externas) são construídos a partir da fonte, não instalados a partir dos repositórios.

O problema específico é o suporte ao suporte da Oracle. Eu sou capaz de conectar-me a instâncias do Oracle sem um problema se eu definir o ORACLE_HOME e LD_LIBRARY_PATH na linha de comando ao acionar o Python, mas não consigo obter essas variáveis passadas para o processo WSGI. / p>

A mensagem de erro específica que recebo nos logs do Apache é:

ImproperlyConfigured: Error loading cx_Oracle module: libclntsh.so.11.1: cannot open shared object file: No such file or 

diretório

Eu tentei configurar as variáveis no VirtualHost (usando SetEnv ), o arquivo envvars do Apache, o arquivo .bashrc do usuário do apache e o arquivo .wsgi (usando os.environ['ORACLE_HOME']='...' ), tudo sem efeito. Nos três primeiros casos, as variáveis parecem não fazer nada para o Python - a impressão os.environ['ORACLE_HOME'] indica que nenhum valor foi definido.

Eu também tentei reconstruir o mod_wsgi.so a partir do código-fonte com o LD_RUN_PATH evn var set, conforme o conselho aqui: link No entanto, isso também foi ineficaz.

O que estou perdendo? Como posso obter essas env envs passadas com sucesso? Obrigado antecipadamente!

    
por Michael C. O'Connor 14.07.2011 / 16:19

4 respostas

0

A chave parece ter adicionado as bibliotecas Oracle a ld.so.conf .

    
por 14.07.2011 / 19:30
3

No Ubuntu, colocando

export ORACLE_HOME=<your oracle home>
export LD_LIBRARY_PATH=<your library path>

em /etc/apache2/envvars parece fazer o truque.

Se nada mais ajudar, você pode editar seus scripts de inicialização do Apache e colocá-los acima exportar linhas antes da inicialização do daemon do Apache (lembro que fiz algo parecido com isso há muito tempo atrás no Debian).

    
por 15.07.2011 / 13:24
1

Desde que você construiu o Apache a partir do código-fonte, você poderia ter adicionado ao arquivo 'envvars' no mesmo diretório que o 'httpd' executável das linhas:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/some/path/to/oracle/lib/directory
export LD_LIBRARY_PATH

O método LD_RUN_PATH ao compilar o mod_wsgi também deve funcionar, mas como você não mostra os métodos exatos que você usou, ou seja, comandos executados, para tentar obter esse trabalho, não é possível comentar por que não funcionou . Seria da forma embora:

make distclean
./configure
LD_RUN_PATH=some/path/to/oracle/lib/directory make
sudo make install

Portanto, defina LD_RUN_PATH na mesma linha ao executar 'make'. Se você configurá-lo separadamente como variável de ambiente antes de executar 'make', você deve 'exportar' a variável de ambiente, caso contrário, make não passará para o compilador.

    
por 15.07.2011 / 01:43
0

Outra solução possível é definir LD_LIBRARY_PATH no script de inicialização. em /etc/init.d/httpd :

export ORACLE_HOME=<your oracle home>
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
    
por 07.06.2012 / 17:12