【发布时间】:2016-09-13 23:46:20
【问题描述】:
我为此苦苦挣扎了一个星期。我正在尝试运行一个 python 烧瓶应用程序,该应用程序使用即时客户端版本 11.2.0.3.0 与远程 Oracle 数据库连接。
在遇到很多问题后,我最终使用了 3 个 buildpack,其中两个我需要自定义,然后我可以在 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 应用程序中运行 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,这样我就可以拥有一个新编译的版本。
在这一点上,伟大的互联网已经无法帮助我了。无论在哪里,我都可以选择安装 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
编辑:我忘了提这个:
当我在应该安装 libaio 的地方运行 heroku run ls -la /app/.apt/usr/lib/x86_64-linux-gnu 时,我得到了这个:
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 是否已实际安装到您的 LD_LIBRAY_PATH 中的某个目录中?
-
我忘了说...我将编辑我的问题... ty