django-keras-AWS Elastic beantalk-更新已部署应用程序的数据

时间:2018-12-23 23:19:01

标签: django amazon-s3 deployment keras amazon-elastic-beanstalk

背景

我使用的是Mac OS X Yosemite 10.10.5。 在这里似乎没有任何文献用我发现的复杂性来指代这个特定问题。这涉及到django应用程序的简单部署。 pythonanywhere会部署它,但是速度非常慢。 我有一个大型模型(.hd5)文件,是从keras中的深层网络生成的。大小约为1.5 GB。我的整个项目大约是1.77 GB。我使用通用代码(例如,使用os.path.join而不是相对引用)使整个项目运行完美,并且所有django文档均符合标准。这就是为我的应用程序中的搜索引擎加油的原因,没有它,整个站点就不值得部署,因为所有d3.js图表都是从返回的数据中填充的。购买pythonanywhere.com的扩展软件包以存储5GB时,发生了相同的问题,该网站运行速度太慢,甚至不值得。请注意,这在我的本地计算机上速度很快(在加载时间大约30秒之后,才弹出127.0.0.1:8080,可以进行访问和测试)。当然,这是一个烧瓶原型,我现在将所有代码都移植到了django,因为django似乎更易于部署。

问题

我从头到尾遍历了this整个教程,并且具有军事精确性,并且在本地运行没有任何错误。这是在运行python startproject dwsite之后的my django project。正如您在子文件夹中看到的那样,我继续在其中构建一个名为deepwisdom的应用程序。静态文件和模板文件是此目录中的引用,它基本上只是一堆位于其中的引导程序代码文件。但是,我的项目需要运行一个很大的1.5 GB数据文件夹。在应用程序开始引用圣经经文和内容之前,我先加载了模型对象和一些小泡菜。我里面也有一个小的bible.db sqlite database。长话短说,在本地渲染或执行搜索功能完全没有问题,但是由于AWS对EB应用程序设置的上限(150MB),我无法上传整个应用程序。

部署后

本教程的最后几行很成功, as shown here成功部署应用程序。他们把我带到了一个名为

的s3存储桶中

elasticbeanstalk-us-east-1-281685280576

他们把我带到了一个名为:

的CNAME
django-env.mm9prjibak.us-east-1.elasticbeanstalk.com

我立即更改了dwtest / dwtest.setting.py文件以反映这一点,然后访问该站点,并得到我所期望的,a missing data folder error从我丢失的数据文件夹中丢失了一个数据文件无法与我的应用同步上传。

我的(待定成功/失败)解决方案

因此在我的s3实例中,我有一个从eb cli创建的文件夹,名为dwtest / app-181223_161536.zip

这正是我所期望的,但是它不包含上一张图像中的数据文件夹,因为它不允许我以前上传它,这给了我this error这个错误。

好吧,所以我实际上删除了该zip文件夹sitting in here,该文件夹是我桌面上该文件夹的压缩版本;部署的应用程序版本。如您所见,它现在已经不存在了,我将重新上传完全相同的zip文件,将其解压缩,并将数据文件夹放入其中,然后将其压缩并上传。上载将永远进行,因此我尚未测试它是否会正常工作,但是我认为我需要对文档进行某种类型的eb updateeb update-environment --application-name dwsite处理,但是我有不知道。奇怪的是,当它要求我重新创建deploy并引用我的桌面文件夹I cd dwsite时,此操作将无效。由于上周我没有尝试过,所以没有任何效果。如果没有人知道如何处理这种情况,最重要的是,我在本地有一个运行良好的django应用程序,并且我正式不知道如何上传它,但是我感觉非常非常。

>

如果您花时间阅读了过去5天我沮丧的结果,谢谢,即使您不能帮助,也知道我至少得到某人的认可,这让我感到很安慰,这与这些PaaS公司中的任何一家公司的技术支持团队。

非常感谢, bmc

编辑:

这是解决方案吗?来自this post吗?

aws elasticbeanstalk update-environment --application-name <your-app-name>  --
environment-name <environment-name-to-deploy>   --version-label <version-
label-to-deploy>

1 个答案:

答案 0 :(得分:1)

您最好的选择是将数据与应用程序分离,并分别进行部署。您可以通过压缩数据,创建s3存储桶,然后将zip上传到该s3存储桶来使用beantalk。 Then, you can write an eb command to download the data to a location of your choosing on your server at deploy time。这样,您的代码包将保持小于beantalk的限制(它还可以更快地上传到eb)。如果使用vpc到s3网关,则将s3下载到服务器的速度将非常快。 n.b.,此方法将使每个服务器都有其自己的数据副本。如果您希望服务器共享数据,请使用AWS EFS。