客户端JS(例如AngularJS)+ Django REST后端:是否部署到单个PaaS?

威尔弗雷德·韦

基本上我正在构建类似于此GitHub项目的应用程序:https : //github.com/zackargyle/angularjs-django-rest-framework-seed

是否可以将后端和前端都部署到单个PaaS(例如Heroku / Elastic Beanstalk)上?

具有分离的REST后端和JavaScript前端似乎是一种更清洁/更具扩展性的处理方式,而不是像[django-angular]那样将它们混合在一起:((http://django-angular.readthedocs.org/en/latest/ index.html /),或将REST后端与Django应用程序混合使用,例如http://blog.mourafiq.com/post/55099429431/end-to-end-web-app-with-django-rest-framework

如果无法轻松地将其部署到Elastic Beanstalk上,是否有一种简单的方法以最少的配置将Django后端部署到Elastic Beanstalk上,并将AngularJS前端部署到Amazon EC2 / S3?

我意识到在此之前也有类似的讨论:Client JS + Django Rest Framework,但缺少更多具体细节。

史蒂文

我使用AngularJS作为客户端,使用django-rest-framework作为我的服务。我还具有相同类型的git设置,其中服务器和客户端代码是同一个存储库中的同级。我没有使用Heroku的任何经验,并且对beantalk并不陌生,但是我能够部署我的网站,并且可以在AWS beantalk上运行。

通过beantalk,我知道有两种方法来部署代码。

  1. 使用此处描述的eb和git
    • 如果您想直接推送源代码,效果很好。
  2. 创建您自己的zip,以通过AWS管理控制台上传到beantalk。亚马逊在这里有一个演练
    • 我选择的路线,这样我可以在部署之前“认真构建”我的客户端并用服务器代码压缩。

我使用python脚本自动化了zip的创建。亚马逊的演练提供了一个示例python zip。您必须正确地构建它,我的看起来大致像这样

app.zip
  /.ebextensions/
  /.elasticbeanstalk/
  /app/     <-- my django-rest-framework project (settings.py, wsgi.py, etc.)
  /restapi/ <-- my django-rest-framework application (my api)
  /static/  <-- AngularJS results of 'grunt build' put here
  /manage.py
  /requirements.txt

我知道您并没有特别要求,但是.ebextensions /中的.config文件使我花了很长时间才能上班。可以将其格式化为YAML或JSON(起初可能会造成混淆,因为每个博客的显示方式都不相同)。这个博客帮了我很多忙,只需要小心使用container_commands:而不是command:。我为此花了几个小时...

container_commands:
 01_syncdb:
  command: "django-admin.py syncdb --noinput"
  leader_only: true
option_settings:
 "aws:elasticbeanstalk:container:python:environment":
  "DJANGO_SETTINGS_MODULE": "app.settings"
 "aws:elasticbeanstalk:container:python":
  "WSGIPath": "app/wsgi.py"
  "StaticFiles": "/static/=static/"
 "aws:elasticbeanstalk:container:python:staticfiles":
  "/static/": "static/"
 "aws:elasticbeanstalk:application:environment":
  "AWS_SECRET_KEY": "<put your secret key here if you want to reference from env variable>"
  "AWS_ACCESS_KEY_ID": "<put your access key here>"
  "AWS_S3_Bucket": "<put your bucket here>"

在您创建的zip中(如果遵循django上beantalk指南),在部署时,/ static /文件夹中的客户端代码会自动推送到s3。

这种设置并不完美,我计划进行一些微调,但可以正常工作。我遇到了一些尚未解决的缺点:

  • 由于我将客户端代码放在static /文件夹中,因此我的站点位于mysite.com/static/下。理想情况下,我希望将它作为mysite.com的根目录,并将其django-rest-framework内容放在mysite.com/api/下。
  • 如果您默认在beantalk上使用自我描述api,则资产不会被推送,因为它们位于您的python目录中,而不与您的源代码一起。

更新4-17-2014

我进一步完善了此设置,因此不再需要去mysite.com/static/加载index.html。为此,我使用了基于django类的视图来将index.html映射到网站的根目录。我的urls.py看起来像

urlpatterns = patterns('',
  (r'^$', TemplateView.as_view(template_name="index.html")),
  ...
)

并且在我的settings.py中,我对TEMPLATE_DIRS进行了如下配置

TEMPLATE_DIRS = (
  os.path.join(os.path.dirname(__file__) , '../static').replace('\\','/')
)

我使用../static,因为我的静态目录是我的应用程序目录的同级文件。

最后一步是更新我的Gruntfile.js,以便“ grunt build”将我的角度代码中的所有相对URL前缀为静态文件夹。为此使用了grunt-text-replace这是我的代码在/ dist文件夹中最小化后运行的最后一个任务。这种方法的缺点是,如果我将静态内容添加到脚本,bower_components,样式等之外的新子文件夹中,则必须更新此任务。

replace: {
    replace_js_templates: {
        src: ['dist/scripts/*.js'],
        overwrite: true,                 // overwrite matched source files
        replacements: [{
            from: /templateUrl:\s*"/g,
            to: 'templateUrl:"static/'
        }]
    },
    replace_index: {
        src: ['dist/index.html'],
        overwrite: true,                 // overwrite matched source files
        replacements: [{
            from: /(src|href)="(bower_components|styles|scripts)/g,
            to: '$1="static/$2'
        }
        ]
    }
},

现在django将为我的index.html页面提供服务,但/ static /目录中的所有其他内容都可以从CDN中受益。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

客户端JS + Django Rest Framework

来自分类Dev

django rest框架的客户端?

来自分类Dev

客户端的 django-rest-auth 令牌认证

来自分类Dev

Django:使用angularjs验证客户端声明的表单

来自分类Dev

DJANGO中的REST / JSON通信...在客户端(Linux)和服务器(Django)之间

来自分类Dev

Django request.POST从客户端到服务器端的字典顺序

来自分类Dev

从客户端到服务器端的Django request.POST字典顺序

来自分类Dev

在Angular 2+客户端和Django后端之间打开WebSocket连接

来自分类Dev

如何为移动应用程序客户端的后端Django使用CSRF安全性

来自分类Dev

从node.js客户端到浏览器客户端的socket.emit

来自分类Dev

Django rest-framework:如何让客户端知道pk,以便它可以获取,更新或删除

来自分类Dev

开始为基于Django REST API的系统开发客户端(CORS错误)?

来自分类Dev

Django REST Framework可以向客户端指示只读字段吗?

来自分类Dev

带有自制 ERP 客户端的 Django REST 框架结构

来自分类Dev

Dialogflow 访问角色:使用 JS 客户端部署凭据

来自分类Dev

在服务器端的Django REST中使用API,并在Angular的客户端中提供该API

来自分类Dev

Azure上的Django Postgres客户端

来自分类Dev

Django测试客户端未登录

来自分类Dev

不同客户端的Django权限

来自分类Dev

Django 测试客户端发布数据

来自分类Dev

将客户端计算的结果绑定到控件(例如图表)

来自分类Dev

将客户端计算的结果绑定到控件(例如图表)

来自分类Dev

检查客户端是否单击仅在CSS文件中定义的图像,例如类的背景

来自分类Dev

Snowflake是否在向SQL客户端(例如DataGrip)的解释计划中提供成本信息?

来自分类Dev

检查客户端是否单击仅在CSS文件中定义的图像,例如类的背景

来自分类Dev

Ignite Compute:是否可以在客户端离开时继续执行作业?(例如崩溃)

来自分类Dev

Firebase REST API与JS客户端库

来自分类Dev

客户端与Rest-API进行通信的JS框架

来自分类Dev

node.js中的REST客户端

Related 相关文章

  1. 1

    客户端JS + Django Rest Framework

  2. 2

    django rest框架的客户端?

  3. 3

    客户端的 django-rest-auth 令牌认证

  4. 4

    Django:使用angularjs验证客户端声明的表单

  5. 5

    DJANGO中的REST / JSON通信...在客户端(Linux)和服务器(Django)之间

  6. 6

    Django request.POST从客户端到服务器端的字典顺序

  7. 7

    从客户端到服务器端的Django request.POST字典顺序

  8. 8

    在Angular 2+客户端和Django后端之间打开WebSocket连接

  9. 9

    如何为移动应用程序客户端的后端Django使用CSRF安全性

  10. 10

    从node.js客户端到浏览器客户端的socket.emit

  11. 11

    Django rest-framework:如何让客户端知道pk,以便它可以获取,更新或删除

  12. 12

    开始为基于Django REST API的系统开发客户端(CORS错误)?

  13. 13

    Django REST Framework可以向客户端指示只读字段吗?

  14. 14

    带有自制 ERP 客户端的 Django REST 框架结构

  15. 15

    Dialogflow 访问角色:使用 JS 客户端部署凭据

  16. 16

    在服务器端的Django REST中使用API,并在Angular的客户端中提供该API

  17. 17

    Azure上的Django Postgres客户端

  18. 18

    Django测试客户端未登录

  19. 19

    不同客户端的Django权限

  20. 20

    Django 测试客户端发布数据

  21. 21

    将客户端计算的结果绑定到控件(例如图表)

  22. 22

    将客户端计算的结果绑定到控件(例如图表)

  23. 23

    检查客户端是否单击仅在CSS文件中定义的图像,例如类的背景

  24. 24

    Snowflake是否在向SQL客户端(例如DataGrip)的解释计划中提供成本信息?

  25. 25

    检查客户端是否单击仅在CSS文件中定义的图像,例如类的背景

  26. 26

    Ignite Compute:是否可以在客户端离开时继续执行作业?(例如崩溃)

  27. 27

    Firebase REST API与JS客户端库

  28. 28

    客户端与Rest-API进行通信的JS框架

  29. 29

    node.js中的REST客户端

热门标签

归档