Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geodjango的Beanstalk迁移失败_Django_Amazon Elastic Beanstalk_Gdal_Geodjango - Fatal编程技术网

Geodjango的Beanstalk迁移失败

Geodjango的Beanstalk迁移失败,django,amazon-elastic-beanstalk,gdal,geodjango,Django,Amazon Elastic Beanstalk,Gdal,Geodjango,我想在aws beanstalk中部署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 insta

我想在aws beanstalk中部署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)

下面是使用
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

我也遇到过这个问题,django 2.2,EPEL repositorie的版本是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分钟以上

@Jorge Alfaro在Django 2.2中是正确的。我尝试了他的解决方案,在ebextensions.config文件中从源代码安装东西,但至少在一个小EC2实例上,即使使用max-3600-seconds设置,它也会超时。建议在以下位置使用更强健、更快速的启动解决方案:

  • 创建一个EC2实例,您可以用SSH连接到该实例中,并且该实例具有推送到S3存储桶的权限
  • 在实例上使用,在本地构建Geos、Proj4和GDAL。
    • 对于那些版本,不要依赖回购协议的具体数字——参考与您的Django版本兼容的版本
    • 为了获得最大的可靠性,还建议修改脚本以引用datumgrid文件
    • 还要注意,该构建脚本的作者错误地将Proj4构建放了两次。参考
  • 将构建推送到S3存储桶中
  • 如果不再需要,请停止并终止在#1中创建的实例
  • 从S3下载构建并依赖它们进行GDAL设置。
    • 回购协议中的PYTHONPATH对我不起作用-你可能需要更新它,例如/opt/python/current/app
    • 例如,如果您的服务器上有一个以前通过yum运行的GeoDjango版本,那么您可能希望通过EB控制台更新Beanstalk部署设置,以使用
      不可变
      策略,从而使此新安装完全新鲜。否则,使用滚动部署,您将在同一台服务器上安装不同版本的GeoDjango,这导致了我的经验中的错误(例如,OP的原始
      GDALGetMetadataDomainList

  • 谢谢分享!请参阅类似但IMO改进的解决方案。这不是一个长期的解决方案,只是一个避免使用最新Django功能和补丁的解决方案。请参阅我的,了解如何让较新的Django和GeoDjango在Beanstalk上工作。非常感谢您,您为我节省了数小时的工作时间!对于仍在苦苦挣扎的其他人,我发现有两件事很有帮助:-使用
    aws s3 cp
    命令,而不是
    s3cmd
    ,因为后者不再受支持-如果您无法为put请求在EC2和s3之间排序权限,按如下方式使用您的访问和密钥:
    AWS\u access\u key\u ID=access key AWS\u secret\u access\u key=secret key AWS s3 cp/tmp/gdal-2.4.4.tar.gz s3://my bucket name