我的Python App Engine Flex应用程序需要连接到外部Oracle数据库。目前我正在使用cx_Oracle Python包,要求我安装Oracle Instant Client。
我已按照Instant Client installation steps在本地(在macOS上)成功运行了这个。这些步骤要求我执行以下操作:
/opt/oracle
/opt/oracle/instantclient_12_2/libclntsh.dylib.12.1
到~/lib/
但是,我对如何在App Engine Flex(instructions)中执行相同操作感到困惑。具体来说,这就是我所困惑的:
sudo yum install libaio
来安装libaio
包。我如何在GAE Flex上执行此操作?或者这个包已经可以使用了吗?LD_LIBRARY_PATH
中的app.yaml
环境变量设置为export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH
。这会有用吗?总的来说,我不确定自己是否走在正确的轨道上。很想听到之前管理过这个的人:)
答案 0 :(得分:1)
如果您的任何依赖项在Google提供的基本GAE弹性图像中不可用,并且无法通过pip
进行安装(因为它不是python包,或者它不适用于PyPI或其他任何原因)然后您无法使用requirements.txt
文件将其安装在GAE flex应用程序中。
满足此类依赖关系的正确方法是构建自己的自定义运行时。来自About Custom Runtimes:
自定义运行时允许您定义新的运行时环境 可能包括其他组件,如语言解释器或 应用服务器。
是的,这意味着提供自定义Docker文件。在您的特定情况下,您将在此Dockerfile中安装Instant Client和libaio
。另请参阅Building Custom Runtimes。
答案 1 :(得分:0)
回答您的第一个问题,我认为oracle网站上的说明只是表明您必须安装所述库才能使您的应用程序正常工作。
在App引擎flex的情况下,他们确保部署中存在库的方法是使用requirements.txt文本文件。有一个documentation页面可以解释如何执行此操作。
另一方面,我将假设"即时客户端文件"不是库,而是运行App的必要数据。您应该使用Google云端存储来为其提供服务,或者在Google Cloud中使用任何其他alternative of Storage。
我相信,如果这就是您的应用程序工作所需的全部内容,那么推送您自己的自定义容器不是必需的。