针对Geodjango的Beanstalk迁移失败

时间:2019-04-27 06:25:45

标签: django amazon-elastic-beanstalk gdal geodjango

我想在AWS beantalk中部署geodjango。

我已经尝试过此解决方案。以前有用。

commands:
  01_yum_update:
    command: sudo yum -y update
  02_epel_repo:
    command: sudo yum-config-manager -y --enable epel
  03_install_gdal_packages:
    command: yum --enablerepo=epel -y install gdal gdal-devel

packages:
  yum:
    git: []
    postgresql96-devel: []
    gettext: []
    libjpeg-turbo-devel: []
    libffi-devel: []

但是现在它显示此错误。

AttributeError: /usr/lib64/libgdal.so.1: undefined symbol: GDALGetMetadataDomainList
   (ElasticBeanstalk::ExternalInvocationError)

这是完整的error log

3 个答案:

答案 0 :(得分:2)

看起来像使用Django==2.2.1弄乱了东西。当前工作的requirements.txt如下:

Django==2.1.8
django-cors-headers==2.5.2
django-debug-toolbar==1.11
django-extensions==2.1.6
django-model-utils==3.1.2
djangorestframework==3.9.2
psycopg2-binary==2.8.2
pytz==2019.1
six==1.12.0
sqlparse==0.3.0

答案 1 :(得分:1)

@Jorge Alfaro在Django 2.2 dropping support for GDAL 1.9 and 1.10中是正确的。我尝试了他从ebextensions .config文件中从源代码安装内容的解决方案,但至少在小型EC2实例上,甚至连max-3600-seconds设置都超时了。建议在https://github.com/vancityhuddy/aws-eb-gdal-example上使用一种更强大且快速启动的解决方案:

  1. 创建一个可以通过SSH进入并有权推送到S3存储桶的EC2实例。
  2. 在实例上使用build script在本地构建Geos,Proj4和GDAL。
    • 对于这些版本,请不要依赖该存储库的特定编号-有关与您的Django版本兼容的版本,请参考Django's site
    • 为了获得最大的可靠性,建议修改脚本以将基准数据文件引用为Django's site advises
    • 还要注意,该构建脚本的作者错误地将Proj4构建放置了两次。引用needed edit
  3. 将构建版本推送到您的S3存储桶中。
  4. 如果不再需要,请停止并终止在#1中创建的实例。
  5. Update your Beanstalk config从S3下载构建,并依靠它们进行GDAL设置。
    • 该存储库中的PYTHONPATH对我不起作用-您可能需要更新它,例如/ opt / python / current / app
    • 例如,如果您通过yum在服务器上具有以前运行的GeoDjango版本,则可能要通过EB控制台更新Beanstalk部署设置以使用immutable策略,以便此新安装是完全新鲜。否则,使用滚动部署,您需要在同一服务器上安装不同版本的GeoDjango,这会导致我的经验错误(例如,OP的原始GDALGetMetadataDomainList)。

答案 2 :(得分:0)

我也遇到了这个问题,原来是django 2.2 drops support for GDAL 1.9 and 1.10,EPEL存储库的版本是1.7。我最终使用以下脚本从源代码安装了所有内容:

commands:
  01_execute_script:
    test: test ! -e /usr/bin/gdalinfo
    command:        "/tmp/gdal_install.sh"

files:
  "/tmp/gdal_install.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      # Geos
      cd ~
      wget -O ~/geos-3.7.2.tar.bz2 http://download.osgeo.org/geos/geos-3.7.2.tar.bz2
      tar xjf ~/geos-3.7.2.tar.bz2
      cd ~/geos-3.7.2
      ./configure --prefix=/usr --enable-python
      make
      sudo make install

      # Proj4
      cd ~
      wget -O ~/proj-6.1.0.tar.gz http://download.osgeo.org/proj/proj-6.1.0.tar.gz
      wget -O ~/proj-datumgrid-1.7.tar.gz http://download.osgeo.org/proj/proj-datumgrid-1.7.tar.gz
      tar xzf ~/proj-6.1.0.tar.gz
      cd ~/proj-6.1.0/data
      tar xzf ~/proj-datumgrid-1.7.tar.gz
      cd ..
      ./configure --prefix=/usr
      make
      sudo make install

      # GDAL
      cd ~
      wget -O ~/gdal-2.3.2.tar.gz http://download.osgeo.org/gdal/2.3.2/gdal-2.3.2.tar.gz
      tar xzf ~/gdal-2.3.2.tar.gz
      cd ~/gdal-2.3.2
      ./configure --prefix=/usr --with-python --with-pg --with-geos --with-curl
      make
      sudo make install

      sudo ldconfig

如果有人找到更好的解决方案,请告知我们,根据实例大小,从源代码构建所有内容可能需要30分钟以上的时间