将 .env 文件添加到 gitignore 后,Django 弹性 beanstalk CLI 部署失败

Posted

技术标签:

【中文标题】将 .env 文件添加到 gitignore 后,Django 弹性 beanstalk CLI 部署失败【英文标题】:Django elastic beanstalk CLI deployment failure after adding .env files to gitignore 【发布时间】:2022-01-04 13:47:35 【问题描述】:

我是 Django/EB/Git 的新手,一直在做一个 django 项目,并成功地分离了我的设置并分离了用于开发和生产的 .env 文件,这些文件都按预期工作并已部署 - 请参阅以下项目结构:

项目结构

project root
    myapp
        settings
            __init__
            base.py
            dev.py
            prod.py
.env.dev
.env.prod
.gitignore
manage.py
requiremnts.txt

但是,当我将 .env 文件添加到 .gitignore 文件时,我现在在 eb 日志 (cfn-init-cmd.log) 中收到以下部署错误:

.gitignore

# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml
.env.dev
.env.prod

错误:eb 日志 (cfn-init-cmd.log) FileNotFoundError:[Errno 2] 没有这样的文件或目录:'.env.prod'

如果我从 .gitignore 文件中删除 .env.prod,那么我的项目部署成功。

此外,我在网上阅读可能是由于我将 .env.prod 文件添加到 repo 中,但我相信当我重新开始并重新创建 git repo 时,我也排除了 git add/commit以下命令(在本地项目上运行的命令):

git add --all -- :!.env.dev :!.env.prod
git commit -m "Initial commit"

接着是:

eb deploy myproject-env

查看我的 .ebextensions 配置文件如下:

.ebextensions/django.config

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: myproject.wsgi:application
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: "myproject.settings.prod"
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    "/static": "static/"
packages:
  yum:
    python3-devel: []
    mariadb-devel: []
container_commands:
  01_collectstatic:
    command: "source /var/app/venv/staging-LQM1lest/bin/activate && python manage.py collectstatic --noinput"
  02_migrate:
    command: "source /var/app/venv/staging-LQM1lest/bin/activate && python manage.py migrate --noinput"
    leader_only: true

我不确定是否应该将任何 git 命令添加到我的 .ebextensions 配置中,但假设它只是在本地 git repo 上完成然后推送到 github,我也尝试使用和不使用 codecommit 进行部署,但是与上述没有区别。

我花了大约一周的时间来弄清楚这一切并最终能够部署,我相信这应该是将 .env 文件添加到 .gitignore 文件的最后一步,我只是不确定我是什么'我在 git repo 中遗漏或做了一些我正确的事情。

非常感谢您对此的任何帮助/指导,在此先感谢。

【问题讨论】:

【参考方案1】:

如果 .ebignore 文件不存在,则 Elastic beanstalk 使用 .gitignore 文件。因此,您可以将两者都用于文件管理。

AWS doc 说:

您可以告诉 EB CLI 忽略项目中的某些文件 通过将文件 .ebignore 添加到目录中。这个文件 像 .gitignore 文件一样工作。

...

如果 .ebignore 不存在,但 .gitignore 存在,EB CLI 将忽略 .gitignore 中指定的文件。如果存在 .ebignore,则 EB CLI 不读取 .gitignore。

当 .ebignore 存在时,EB CLI 不使用 git 命令来 创建你的源包。这意味着 EB CLI 会忽略文件 在 .ebignore 中指定,并包括所有其他文件。特别是, 它包括未提交的源文件。

【讨论】:

感谢您与我确认这一点,我之前确实尝试过,但这次我显然错误地向 .ebignore 添加了内容,我再次创建了 .ebignore 并包含了在 .gitignore 中找到但添加的 eb 内容。 env 到 .gignore 并且未添加到 .ebignore。以前我在 .ebignore/.gitignore woops 中都有 .env.. 所以有了你的评论,我重新审视了这个,现在可以再次感谢

以上是关于将 .env 文件添加到 gitignore 后,Django 弹性 beanstalk CLI 部署失败的主要内容,如果未能解决你的问题,请参考以下文章

.gitignore配置

.gitignore文件中添加忽略文件或者目录后,不起作用。

无法将文件夹添加到 gitignore 文件 [重复]

text 将目录添加到.gitignore后,从远程存储库中删除目录

1.7 (git相关) .gitignore 添加后无效的解决办法

在项目中隐藏 .env 文件