带有 Django 的 AWS Beanstalk:eb create 抱怨未知配置设置“StaticFile”

Posted

技术标签:

【中文标题】带有 Django 的 AWS Beanstalk:eb create 抱怨未知配置设置“StaticFile”【英文标题】:AWS Beanstalk with Django: eb create complains about unknown config setting 'StaticFile' 【发布时间】:2020-09-16 13:42:13 【问题描述】:

我正在尝试使用 Elasticbeanstalk 部署 django 应用程序,遵循此设置

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html

还有这个

https://www.1strategy.com/blog/2017/05/23/tutorial-django-elastic-beanstalk/

在第一次尝试时,在 .ebextension/django.config 中,我有

option_settings:
  "aws:elasticbeanstalk:application:environment":
    DJANGO_SETTINGS_MODULE: "my_django_path_name.settings"
    PYTHONPATH: "$PYTHONPATH"
  "aws:elasticbeanstalk:container:python":
    WSGIPath: "my_django_path_name/wsgi.py"
    StaticFiles: "/static/=www/static/"

当调用eb create时,它会抱怨

ERROR: ServiceError - Configuration validation exception: Invalid option specification (Namespace: 
'aws:elasticbeanstalk:container:python', OptionName: 'StaticFiles'): Unknown configuration setting.

于是我取出了StaticFiles部分,最终变成了

option_settings:
  "aws:elasticbeanstalk:container:python":
    WSGIPath: "my_django_path_name/wsgi.py"

它仍然抱怨未知的 OptionName:StaticFiles

然后我使用了https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-container.html#python-namespaces 中的示例并稍作调整

option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: production.settings

  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango.wsgi:application
    NumProcesses: 3
    NumThreads: 20

但它仍然抱怨同样的事情。

我不知道在哪里读取 StaticFiles 选项名称。它在 .config 文件中不存在。它是缓存在某个地方还是什么地方?

【问题讨论】:

你确定这是唯一定义它的地方吗?也许设置的某处有重复? 我只创建了一个.ebextension 文件夹。如果 bean stalk 确实在搜索该文件夹以及其中的所有 .config 文件,那么这应该是唯一的地方 如果您手动创建 zip 部署并使用 EB 控制台创建 env,错误是否仍然存在? 好的,我明白了..打开调试后,我意识到 eb cli 正在从我的 git 中读取内容......我还没有将我的更改提交给 git.. ...哇 如果它现在可以工作,我可以根据 cmets 提供答案以供将来参考吗? 【参考方案1】:

根据 cmets 中的讨论,发现问题是由于 eb 正在部署 git 的旧版本,而不是本地的、已更正的版本申请。

解决方案是将更改推送到 git,以便部署新版本。

【讨论】:

【参考方案2】:

这里有两个问题:

    正如上面提到的@Marcin,eb CLI 从git 读取文件,因此您只需在运行eb deploy 之前将更改提交到本地git 存储库。无需推送到您的远程仓库。 您似乎在 EB 中使用新的Amazon Linux 2 平台,因此从其功能中删除了提供静态文件。因此,您必须通过 S3 存储桶在外部为实例提供静态文件。

来源:

Amazon Linux 2 平台限制

与 Amazon Linux AMI 平台(之前的 Amazon Linux 2)相比,Amazon Linux 2 平台缺少一些功能:提供静态文件和自定义平台

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.migration-al.html

不支持静态文件选项

仅在 Amazon Linux AMI Python 平台版本上支持使用 aws:elasticbeanstalk:container:python:staticfiles 命名空间配置静态文件。

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-container.html#python-namespaces

【讨论】:

是的,我知道我不能像以前那样提供静态文件。现在我不担心这个。我需要迁移才能运行,但它仍然没有运行 好。我最近经历了所有这些,请查看我对您的新问题的评论,看看我是否可以提供帮助。

以上是关于带有 Django 的 AWS Beanstalk:eb create 抱怨未知配置设置“StaticFile”的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic BeanStalk SignatureDoesNotMatch

AWS Elastic Beanstalk 中的 mysqlclient 安装错误

AWS Elastic Beanstalk 上禁止使用 Django 403

如何使 django 项目与 AWS Beanstalk 兼容?

Django AWS Elastic Beanstalk 迁移数据库

AWS Elastic Beanstalk 上的 Django manage.py