A chave parece ter adicionado as bibliotecas Oracle a ld.so.conf
.
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!
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).
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.
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
Tags oracle django apache-2.2 mod-wsgi