Google App Engine实例在完全相同的API调用下的行为有所不同

时间:2018-10-11 21:17:35

标签: python django google-cloud-platform postgis app-engine-flexible

我有一个带有DRF API的Django应用程序,该应用程序部署在Google App Engine的灵活环境中。我在PostGIS扩展中使用PostgreSQL。部署后,我有两个实例正在运行。

我有一个API,使我们能够使用GeoDjango从数据库中检索某些位置。使用完全相同的API调用,它大约有50%的时间失败。从GCP控制台日志中可以看到,一个GAE实例始终可以工作,而另一个实例则系统地返回一个500并出现以下错误:

ImportError: Could not find the GEOS library (tried "geos_c", "GEOS"). 
Try setting GEOS_LIBRARY_PATH in your settings.

但是,已安装GEOS库(请参阅下面的Dockerfile)。为什么这两个实例的行为有所不同,我怎么做才能防止这种情况?

Dockerfile

# [START dockerfile]
FROM gcr.io/google_appengine/python

# Install libraries
RUN apt-get update && apt-get install -y \
  binutils \
  libproj-dev \
  gdal-bin \
  python-gdal

# Change the -p argument to use Python 2.7 if desired.
RUN virtualenv /env -p python3.6

# Set virtualenv environment variables. This is equivalent to running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/
RUN pip install -r requirements.txt
ADD . /app/

CMD gunicorn -b :$PORT nlp.wsgi
# [END dockerfile]

app.yaml

# [START runtime]
runtime: custom
env: flex
entrypoint: gunicorn -b :$PORT nlp.wsgi

runtime_config:
  python_version: 3
# [END runtime]

1 个答案:

答案 0 :(得分:1)

问题实际上与GEOS库完全无关。实例内存不足。我通过简单地增加app.yaml中的资源大小并重新部署来解决了该问题:

resources:
  cpu: 1
  memory_gb: 2
  disk_size_gb: 10