使用Zappa将Geo Django项目添加到AWS Lambda。出现OSError:无法打开共享对象文件:没有这样的文件或目录

时间:2019-01-22 11:51:43

标签: django python-3.x aws-lambda zappa

我正在尝试将我的Geo-Django应用程序部署到Zappa 我第一次得到

django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library 
(tried "gdal", "GDAL", "gdal2.2.0", "gdal2.1.0", "gdal2.0.0", "gdal1.11.0", 
"gdal1.10.0", "gdal1.9.0"). Is GDAL installed? If it is, try setting 
GDAL_LIBRARY_PATH in your settings.

然后我遵循此link并添加了以下内容

我在AWS Lambda控制台中设置了以下环境变量:

"LD_LIBRARY_PATH": "/tmp/code/lib/",
"PROJ_LIB": "/tmp/code/lib/proj4/",

在我的(Django)应用的设置文件中,设置:

GDAL_LIBRARY_PATH = "/tmp/code/lib/libgdal.so.20.1.3"
GEOS_LIBRARY_PATH = "/tmp/code/lib/libgeos_c.so.1"

现在我得到了错误

OSError: /tmp/code/lib/libgdal.so.20.1.3: cannot open shared object file: No such file or directory

我该如何解决?

  

我所做的摘要

$ pip install zappa
$ zappa init
$ zappa deploy prod

下面是我的zappa_settings.json

{
    "prod": {
        "aws_region": "us-east-1",
        "django_settings": "Cool.settings",
        "profile_name": "default",
        "project_name": "cool",
        "runtime": "python3.6",
        "s3_bucket": "coolplaces-t47c5adgt",
        "extra_permissions": [{
            "Effect": "Allow",
            "Action": ["rekognition:*"],
            "Resource": "*"
        }]
    }
} 

2 个答案:

答案 0 :(得分:1)

我假设您已将两个必需的库捆绑到Lambda部署软件包中。

在Lambda容器中,将其提取到/var/task目录中。该目录已经在LD_LIBRARY_PATH中。尝试将其他必要的ENVVARS也设置为/var/task

答案 1 :(得分:0)

好吧,我想我差不多了 这就是我所做的

zappa undeploy prod
pip uninstall zappa
delete the zappa_settings.json file

第1步)

$ pip install git+git://github.com/bahoo/Zappa.git#egg=zappa

第2步),然后输入zappa init,您将看到它会自动创建一个名为zappa_settings.json的文件

添加到您的zappa_settings.json:

"project_directory": "/tmp/code",(如果这是最后一条语句,请复制为不是“”的形式) "slim_handler": true(如果此错误提示您,请使用此选项。您的文件太大。我可以确定,因为lib文件大小为107.1 MB。也不要使用“,”,因为这是我最后的声明) zappa_settings.json没有引号表示正确)

步骤3)在我的根目录中创建了一个名为lib的目录,并将文件复制到该目录中。 (Copy these files)请参见下面的图像 https://imgur.com/yyd0ixn

Step4) 在您的AWS Lambda控制台中。

"LD_LIBRARY_PATH": "/tmp/code/lib/",
"PROJ_LIB": "/tmp/code/lib/proj4/",

请记住不要替换code并保持原样 https://imgur.com/a/UZIz65B

第5步)将它们添加到Django settings.py :(请勿将code替换为您的路径)

GDAL_LIBRARY_PATH = "/tmp/code/lib/libgdal.so.20.1.3"
GEOS_LIBRARY_PATH = "/tmp/code/lib/libgeos_c.so.1"

第6步)最后,zappa deploy devzappa deploy prod您想要的任何阶段

第7步)如果它给您带来错误,请执行zappa tail,它将为您提供所有日志并告诉您错误是什么,请解决它们,然后执行zappa update

成功。非常感谢bahoo的帮助,并抽出宝贵的时间为我做空。同时也非常感谢您在zappa上使用geodjango

这给了我一个错误,说错误的请求告诉我将长的Amazon链接添加到允许的主机上。做过某事。现在,下一个错误是添加我的data_base。我正在做。但是我觉得我明白了

有关更多详细信息,请参阅 https://github.com/Miserlou/Zappa/issues/985