亚马逊网络服务 (AWS) 上的 Django

Posted

技术标签:

【中文标题】亚马逊网络服务 (AWS) 上的 Django【英文标题】:Django on Amazon Web Service (AWS) 【发布时间】:2015-08-17 21:35:38 【问题描述】:

我已阅读这些教程:https://realpython.com/blog/python/deploying-a-django-app-to-aws-elastic-beanstalk/ 和 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html

我使用 Django 1.8.2,亚马逊的文档似乎有点过时了(他们仍然使用 django-admin.py 而不是 django-admin),并且它的某些部分不起作用(当东西不起作用时)工作,我回退到realpython链接一)。

所以,除了我的管理页面没有加载静态文件外,我一切正常。因此,未加载 css 文件。

这是我的 settings.py :

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static/')

我也试过用:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'static'). 

但还是不行。

这是我的 eb 配置文件:

container_commands:
  01_migrate:
    command: "source /opt/python/run/venv/bin/activate && python papp/manage.py migrate --noinput"
    leader_only: true
  02_createsuperuser:
    command: "source /opt/python/run/venv/bin/activate && python papp/manage.py createsu"
    leader_only: true
  03_collectstatic:
    command: "source /opt/python/run/venv/bin/activate && python papp/manage.py collectstatic --noinput"

  option_settings:
    "aws:elasticbeanstalk:application:environment":
      DJANGO_SETTINGS_MODULE: "papp.settings"
      PYTHONPATH: "/opt/python/current/app/papp:$PYTHONPATH"
    "aws:elasticbeanstalk:container:python":
      WSGIPath: "papp/papp/wsgi.py"
    "aws:elasticbeanstalk:container:python:staticfiles":
      "/static/": "static/"

进行更改后,我使用了 eb deploy 命令。

我需要做额外的步骤吗?我在这里读到:Default Django 1.5 admin css not working 我需要更改别名,但它适用于 apache。

我还阅读了 django doc 文件,例如 https://docs.djangoproject.com/en/1.8/howto/static-files/,但我不确定在 AWS 的 STATIC_ROOT 中放置什么

非常感谢任何帮助。谢谢

【问题讨论】:

【参考方案1】:

虽然您似乎已经解决了您的问题,但我也遇到了类似的问题,但是由于我的应用是从项目目录的根目录上传的,因此设置 STATIC_ROOT = os.path.join(BASE_DIR, '..','static') 不起作用。

更改 container_commands 以遵守 AWS Docs 就成功了

container_commands:
  01_migrate:
    command: "django-admin.py migrate"
    leader_only: true
   02_collectstatic:
     command: "django-admin.py collectstatic --noinput"
     leader_only: true

在此之前,按照相同的教程,我遇到了以下问题

createsu 命令不起作用。

跑步

$ eb ssh
$ /opt/python/run/venv/bin/python manage.py collectstatic

不知何故指向了一个奇怪的位置

您已请求在目的地收集静态文件 设置中指定的位置: /opt/python/bundle/2/app/static

将命令更改为AWS Docs版本后,上述所有问题也都解决了。

【讨论】:

【参考方案2】:

原来“aws:elasticbeanstalk:container:python:staticfiles”将您的 EC2 实例 (/opt/python/current/app/static/) 上的目录中的文件映射到 /static/

将 settings.py 中的 STATIC_ROOT 设置为 os.path.join(BASE_DIR, '..','static') 修复了问题

【讨论】:

以上是关于亚马逊网络服务 (AWS) 上的 Django的主要内容,如果未能解决你的问题,请参考以下文章

使用亚马逊网络服务的UDP服务

markdown [AWS]亚马逊网络服务#aws

Django项目上传到AWS服务器上

是否有可用的亚马逊网络服务 (aws) 模拟/仿真?

Apache 不在 443 (aws) 上为 Django 提供服务

亚马逊 s3 / 其他 AWS 服务上的操作日志