【问题标题】:Google App Engine - Multiple yaml files in one project share a libGoogle App Engine - 一个项目中的多个 yaml 文件共享一个库
【发布时间】:2018-07-19 07:52:05
【问题描述】:

我想创建一个多服务应用引擎应用,使用此页面上显示的第一个图表。 https://cloud.google.com/appengine/docs/standard/python/configuration-files#an_example

我想使用第三方库所以我在根目录下有一个lib文件夹,根目录下有一个yaml。 然后我想要一个名为 predict 的微服务。所以我也在根目录下创建了一个名为 predict 的文件夹,然后在这个文件夹下,我也想使用 lib 中的包编写 py 文件。

我的做法是这样的:

import os,sys,inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
vendor.add(os.path.join(parentdir, 'lib'))

正如错误所说,这对我不起作用:

ValueError: virtualenv: cannot access /base/data/home/apps/f~project-name/lib: No such virtualenv or site directory

显然它对我不起作用,这样做的正确方法是什么?

更新:Dan 的解决方案对我有用!所以当我部署我的微服务预测时,我需要进入预测目录并部署它。我认为这就是它找不到 lib 的原因。通过使用 bash 对 lib 库进行符号链接。

ln -s ../lib/ ./lib

我解决了这个问题。

【问题讨论】:

    标签: python python-2.7 google-app-engine


    【解决方案1】:

    您面临的问题是每个服务只能访问其自己的服务目录中的文件,即其app.yaml文件所在的目录,它们无法访问应用程序的根目录。

    我的方法(我所有的服务都使用标准环境):

    • 在顶部应用程序目录中创建了一个 lib 目录,并在其中安装了我希望跨多个服务共享的每个包
    • 每个服务在应用程序的目录中都有自己的子目录和lib 目录,其中:
      • 我安装了只有该服务需要的库(如果有)
      • 我从顶部 lib dir 符号链接了所需的共享库

    这是我的应用程序目录结构:

    app_dir/
    app_dir/dispatch.yaml
    app_dir/cron.yaml
    app_dir/index.yaml
    app_dir/queue.yaml
    app_dir/lib/
    app_dir/lib/shared_lib_1/
    app_dir/lib/shared_lib_2/
    app_dir/lib/shared_lib_3/
    app_dir/service1/
    app_dir/service1/app.yaml
    app_dir/service1/lib/shared_lib_1 -> ../../lib/shared_lib_1
    app_dir/service1/lib/shared_lib_2 -> ../../lib/shared_lib_2
    app_dir/service1/lib/service1_lib_1
    app_dir/service2/
    app_dir/service2/app.yaml
    app_dir/service2/lib/shared_lib_2 -> ../../lib/shared_lib_2
    app_dir/service2/lib/shared_lib_3 -> ../../lib/shared_lib_3
    app_dir/service2/lib/service2_lib_1
    

    不需要摸索lib路径,我在每个服务中只有

    vendor.add('lib')
    

    查看相关:

    【讨论】:

    • 你能对整个 lib 目录进行符号链接吗?不确定这是否会对资源使用产生很大影响。
    • 符号链接整个lib 目录是可能的(我实际上是这样开始的),但前提是所有服务都有相同的需求。应用程序文件配额确实很重要 - 在部署时,符号链接被其内容替换,因此符号链接共享库中的文件数量将乘以共享它的服务数量。如果拉重库,影响可能会很大。
    【解决方案2】:

    检查路径中的所有目录和最终文件,以确保它们在代码运行之前都存在。如果没有,请在此处显示的代码前面加上创建它们的代码...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      相关资源
      最近更新 更多