2016-05-17 10 views
5

Walczę z tym przez tydzień. Próbuję uruchomić aplikację kolby Pythona, która łączy się ze zdalną bazą danych Oracle przy użyciu klienta klienckiego w wersji 11.2.0.3.0.Python cx_Oracle w Heroku

Po wielu problemów, skończyło się za pomocą 3 buildpacks, dwie z nich muszę się dostosować, a następnie mogę zainstalować cx_Oracle w Heroku, ale kiedy uruchomić kod mam błąd:

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

Cóż, ten błąd jest bardzo dobrze udokumentowane, więc po prostu potrzebne do zrobienia:

$ apt-get install libaio1 libaio-dev 

Ale problem jest, jak uruchomić apt-get w Heroku App? Korzystanie z trzecią buildpack:

github.com/heroku/heroku-buildpack-apt 

Pozostałe buildpacks:

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

Po tym wszystkim jest skonfigurowany, że prowadzona Heroku wdrożyć i dostał ten sam błąd na wykonanie. Mogłem zobaczyć w Heroku wdrożyć dziennik, że heroku-buildpack-apt wykonał swoją pracę, ale mam ten sam błąd w import cx_Oracle. Przy okazji, po prostu zmieniłem budowany python buildpack, który używam, aby wykonać pip uninstall cx_Oracle przy każdym wdrożeniu, dzięki czemu mogę mieć jego świeżo skompilowaną wersję.

W tym momencie Wielki Internet nie był już w stanie mi pomóc. Gdziekolwiek spojrzałam, dostałem opcję instalacji libaio. Próbowałem szukać na temat korzystania z apt-get w Heroku App ale wszystko wskazuje na heroku-buildpack-apt

Myślę, że problem może być cx_Oracle nie może znaleźć zainstalowanego libaio i setted dużo Heroku App zmiennych środowiskowych:

$ 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: zapomniałem o tym wspomnieć:

Kiedy uruchomić heroku run ls -la /app/.apt/usr/lib/x86_64-linux-gnu gdzie libaio powinien być zainstalowany mam to:

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 

Po uruchomieniu heroku run ls -l /lib/x86_64-linux-gnu/libaio.so.1.0.1 nie ma tam pliku. Tak więc prawdziwym problemem jest miejsce instalacji libaio?

Ktoś może mi pomóc w tej pracy? Czy istnieje inna dobra substytucja cx_Oracle?

Dzięki!

+0

Czy jesteś w stanie sprawdzić, czy libaio rzeczywiście zainstalowano w jednym z katalogów w LD_LIBRAY_PATH? –

+0

Zapomniałem wspomnieć, że ... będę edytować moje pytanie ... ty –

Odpowiedz

0

rozwiązać ten problem był ... naprawdę lokalizacja libaio.so.

Zacząłem szukać wszystkich możliwych miejsc, w których można zainstalować tę bibliotekę. Znalazłem go w /app/.apt/lib/x86_64-linux-gnu, a nie w /app/.apt/usr/lib/x86_64-linux-gnu, gdzie heroku-buildpack-apt sądzę, że został zainstalowany, ani w żadnym z folderów systemu.

Więc dodałem tę ścieżkę w LD_LIBRARY_PATH i wszystko działa dobrze!

Ty wszystkich !!!

-1

zestaw DYLD_LIBRARY_PATH = $ ORACLE_HOME i LD_LIBRARY_PATH = $ ORACLE_HOME i spróbuj ponownie

+0

LD_LIBRARY_PATH jest już ustawiany. A DYLD_LIBRARY_PATH jest używane tylko przez OS X, prawda? –

+0

tak, to tylko dla MAC OS, dla Linuxa, który byłby LD_LIBRARY_PATH – Kiran

+0

Już ustawiłem ORACLE_HOME też: 'heroku config: set ORACLE_HOME =/app/vendor/oracle_instantclient/instantclient_11_2' Dodaj to do pytania. –

Powiązane problemy