如何使用Google App Engine Flex上的Python cx_Oracle包连接到外部Oracle数据库?

时间:2018-05-31 04:59:56

标签: python oracle google-app-engine cx-oracle

我的Python App Engine Flex应用程序需要连接到外部Oracle数据库。目前我正在使用cx_Oracle Python包,要求我安装Oracle Instant Client

我已按照Instant Client installation steps在本地(在macOS上)成功运行了这个。这些步骤要求我执行以下操作:

  1. 创建一个名为/opt/oracle
  2. 的目录
  3. 创建从/opt/oracle/instantclient_12_2/libclntsh.dylib.12.1~/lib/
  4. 的符号链接

    但是,我对如何在App Engine Flex(instructions)中执行相同操作感到困惑。具体来说,这就是我所困惑的:

    1. 说明说我应该运行sudo yum install libaio来安装libaio包。我如何在GAE Flex上执行此操作?或者这个包已经可以使用了吗?
    2. 我想我可以将Instant Client文件添加到GAE(高达100MB!),然后将LD_LIBRARY_PATH中的app.yaml环境变量设置为export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH。这会有用吗?
    3. 如果不在App Engine Flex上使用自定义Docker容器,这是否可行?
    4. 总的来说,我不确定自己是否走在正确的轨道上。很想听到之前管理过这个的人:)

2 个答案:

答案 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

我相信,如果这就是您的应用程序工作所需的全部内容,那么推送您自己的自定义容器不是必需的。