2016-05-17 11 views
5

Sono alle prese con questo per una settimana. Sto provando a eseguire un'app di fiaschetta python che si connette a un database Oracle remoto utilizzando la versione 11.2.0.3.0 del client istantaneo.Python cx_Oracle in Heroku

Dopo un sacco di problemi, ho finito con 3 buildpacks, due dei quali ho bisogno di personalizzare e quindi ho potuto installare cx_Oracle in Heroku, ma quando ho eseguito il codice che ho ottenuto l'errore:

import cx_Oracle 
ImportError: libaio.so.1: cannot open shared object file: No such file or directory 

bene, questo errore è molto ben documentato, quindi ho solo bisogno di fare:

$ apt-get install libaio1 libaio-dev 

Ma il problema è come eseguire apt-get in un App Heroku? Utilizzando il terzo buildpack:

github.com/heroku/heroku-buildpack-apt 

Gli altri buildpacks:

github.com/Maethorin/oracle-heroku-buildpack 
github.com/Maethorin/heroku-buildpack-python 

Dopo tutto è configurato, ho gestito un Heroku distribuire e ottenuto lo stesso errore in esecuzione. Ho potuto vedere nel registro di Heroku che heroku-buildpack-apt ha fatto il suo lavoro ma ho ricevuto lo stesso errore in import cx_Oracle. Però, per sicurezza, ho modificato il pacchetto di python bifronte, che sto usando, per fare pip uninstall cx_Oracle ad ogni deploy, così posso averne una versione appena compilata.

A questo punto, la Grande Internet non è stata in grado di aiutarmi più. Ovunque guardassi, ho avuto l'opzione di installare libaio. Ho provato a cercare di usare apt-get in Heroku App, ma tutto fa pensare a heroku-buildpack-apt

Credo che il problema potrebbe essere cx_Oracle non riesce a trovare il libaio installato e ho Fondai un sacco di variabili d'ambiente Heroku App:

$ heroku config:set ORACLE_HOME=/app/vendor/oracle_instantclient/instantclient_11_2 
$ heroku config:set LD_LIBRARY_PATH=/app/.apt/usr/lib/x86_64-linux-gnu:/app/vendor/oracle_instantclient/instantclient_11_2:/app/vendor/oracle_instantclient/instantclient_11_2/sdk:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib:/lib 
$ heroku config:set LIBRARY_PATH=/app/.apt/usr/lib/x86_64-linux-gnu:/app/vendor/oracle_instantclient/instantclient_11_2:/app/vendor/oracle_instantclient/instantclient_11_2/sdk:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib:/lib 
$ heroku config:set INCLUDE_PATH=/app/.apt/usr/include 
$ heroku config:set PATH=/bin:/sbin:/usr/bin:/app/.apt/usr/bin 
$ heroku config:set PKG_CONFIG_PATH=/app/.apt/usr/lib/x86_64-linux-gnu/pkgconfig 
$ heroku config:set CPPPATH=/app/.apt/usr/include 
$ heroku config:set CPATH=/app/.apt/usr/include 

EDIT: ho dimenticato di dire questo:

Quando eseguo un heroku run ls -la /app/.apt/usr/lib/x86_64-linux-gnu dove il libaio dovrebbe essere installato ho ottenuto questo:

drwx------ 3 u32473 dyno 4096 Dec 21 2013 . 
drwx------ 3 u32473 dyno 4096 Dec 21 2013 .. 
-rw------- 1 u32473 dyno 16160 May 9 2013 libaio.a 
lrwxrwxrwx 1 u32473 dyno 37 May 9 2013 libaio.so -> /lib/x86_64-linux-gnu/libaio.so.1.0.1 
drwx------ 2 u32473 dyno 4096 May 17 16:57 pkgconfig 

Ma quando corro heroku run ls -l /lib/x86_64-linux-gnu/libaio.so.1.0.1 non c'è nessun file lì. Quindi il vero problema è dove sono installati libaio?

Chiunque può aiutarmi a fare questo lavoro? O c'è un'altra buona sostituzione per cx_Oracle?

Grazie!

+0

Sei in grado di verificare che libaio sia stato effettivamente installato in una delle directory nel tuo LD_LIBRAY_PATH? –

+0

Ho dimenticato di dire che ... Modificherò la mia domanda ... ty –

risposta

0

posso risolvere questo ... il problema era veramente la posizione del libaio.so.

Ho iniziato a cercare tutti i possibili posti in cui questo lib potrebbe essere installato. L'ho trovato in /app/.apt/lib/x86_64-linux-gnu e non in /app/.apt/usr/lib/x86_64-linux-gnu, dove heroku-buildpack-apt pensa che sia stato installato, né in nessuna delle cartelle lib di sistema.

Quindi ho aggiunto questo percorso in LD_LIBRARY_PATH e tutto funziona correttamente!

Ty All !!!

-1

set DYLD_LIBRARY_PATH = $ ORACLE_HOME e LD_LIBRARY_PATH = $ ORACLE_HOME e riprovare

+0

LD_LIBRARY_PATH è già stato impostato. E DYLD_LIBRARY_PATH è usato solo da OS X, non è vero? –

+0

sì, questo è solo per MAC OS, per Linux che sarebbe LD_LIBRARY_PATH – Kiran

+0

Ho già impostato anche ORACLE_HOME: 'heroku config: imposta ORACLE_HOME =/app/vendor/oracle_instantclient/instantclient_11_2' Aggiungi questo alla domanda. –