繁体   English   中英

Heroku中的Python cx_Oracle

[英]Python cx_Oracle in Heroku

我在这个问题上挣扎了一个星期。 我正在尝试运行一个使用即时客户端版本11.2.0.3.0连接远程Oracle数据库的python烧瓶应用程序。

经过很多问题后,我结束了使用3个buildpacks,其中两个我需要自定义然后我可以在Heroku中安装cx_Oracle,但是当我运行代码时出现错误:

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

好吧,这个错误有很好的记录,所以我只需要做:

$ apt-get install libaio1 libaio-dev

但问题是如何在Heroku App中运行apt-get? 使用第三个buildpack:

github.com/heroku/heroku-buildpack-apt

其他构建包:

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

配置完所有内容后,我运行了Heroku部署并在执行时遇到了同样的错误。 我可以在Heroku部署日志中看到heroku-buildpack-apt完成了它的工作但我在import cx_Oracle遇到了同样的错误。 顺便说一下,为了确定,我改变了我正在使用的分叉python buildpack,在每次部署时执行pip uninstall cx_Oracle ,这样我就可以有一个新编译的版本了。

此时,Great Internet再也无法帮助我了。 在我看的任何地方,我都可以选择安装libaio。 我试图在Heroku App中搜索使用apt-get但是所有内容都指向heroku-buildpack-apt

我认为问题可能是cx_Oracle无法找到已安装的libaio并且我设置了很多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

编辑:我忘了提到这个:

当我运行一个heroku run ls -la /app/.apt/usr/lib/x86_64-linux-gnu应该安装libaio我得到了这个:

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

但是当我运行heroku run ls -l /lib/x86_64-linux-gnu/libaio.so.1.0.1那里没有文件。 那么真正的问题是libaio安装在哪里?

有人可以帮我做这个工作吗? 或者还有另一个很好的替代cx_Oracle?

谢谢!

我解决了这个问题......问题实际上是libaio.so的位置。

我开始寻找可以安装此lib的所有可能位置。 我在/app/.apt/lib/x86_64-linux-gnu找到它,而不是在/app/.apt/usr/lib/x86_64-linux-gnuheroku-buildpack-apt认为它已安装,也没有系统lib文件夹。

所以我在LD_LIBRARY_PATH添加了这条路径,一切正常!

泰全部!!!

我也遇到了同样的问题并在付出一些努力后修复了它。 我在这里分享托管连接外部Oracle数据库的python flask app的步骤:

  • cd {ProjectDir}
  • pip install cx_Oracle
  • pip安装gunicorn
  • 创建名为Procfile的文件并将其放入其中:web:gunicorn yourapp:app --log-file = - // yourapp是你的烧瓶python文件
  • pip freeze> requirements.txt
  • git init
  • 创建heroku
  • heroku buildpacks:添加heroku / python
  • heroku buildpacks:添加https://github.com/featurist/oracle-client-buildpack
  • heroku buildpacks:添加https://github.com/heroku/heroku-buildpack-apt
  • heroku config:set BUILD_WITH_GEO_LIBRARIES = 1 //这是for shapely python包(可选)
  • 创建名为Aptfile的文件并将libaio1放入其中
  • git push heroku master

设置DYLD_LIBRARY_PATH = $ ORACLE_HOME和LD_LIBRARY_PATH = $ ORACLE_HOME然后再试一次

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM